Это ожидаемое поведение, см. Эту проблему GitHub .Описанная здесь функция похожа на вашу, вопрос в том, почему не возникает ошибка при включенном noImplicitAny
:
function foo() {
const x = []
x.push(3)
return x
}
Тип массива выводится как «развивающийся массив»тип.затем оно становится number
после первого x.push
.foo должен возвращать number []
.Если тип x
засвидетельствован до того, как поток управления сможет определить его тип, произойдет ошибка.Например:
function foo() {
const x = []
x.push(3)
return x;
function f() {
x; // error, x is `any`.
}
}
Итак, в вашем случае indexOf
свидетельствует о типе массива до того, как тип может быть определен и возникла ошибка.Если indexOf
вызывается после push
, тип определяется и ошибки не возникает.