Это работает, потому что noImplicitAny
не влияет на объявления переменных.Если переменная объявлена, но ее тип не объявлен, предполагается, что any
.
Это было определено так, потому что компилятор, несмотря на неявную переменную any
, может фактически определять ее тип в каждой точке.
Фактически, если вы сделаете это:
var a;
a = 5;
a.dot(); // error, number does not have a 'dot' property.
a = "hi";
a.foo(); // error, string does not have a 'foo' property.
Вы получаете сообщение об ошибке, указывающее, что string
не имеет свойства foo
или number
не имеет свойства dot
.
Но, если вы напишите:
function(b) {
return b + 2;
}
Эта функция, однако, указывает на ошибку, потому что нет ничего, что намекает компилятору о том, что тип b
содержит.