В чем разница между tslints "typedef" и компиляторами машинописного текста "noImplicitAny"? - PullRequest
0 голосов
/ 21 февраля 2020

Я использую tslint для линтинга моего машинописного кода. Я долго искал, но не смог выяснить, какие различия (если таковые имеются) существуют между использованием опции компилятора машинописи noImplicitAny и следующей конфигурацией в tslint:

"no-inferrable-types": [true]
"typedef": [
  true,
  "property-declaration",
  "variable-declaration",
  // ... etc ...
]

1 Ответ

1 голос
/ 25 февраля 2020

Различия существуют, и они довольно велики.

NoImplicite any выдает ошибку, когда переменная распознается как any И не вводится напрямую, например:

let arr = []
arr.forEach(item => item) // Variable 'arr' implicitly has an 'any[]' type.(7005)

// but
[1,2,3].map(item => item) // OK

Во втором случае тип не объявлен (как в первом), однако компилятор TS знает, что такое переменная item (отображение на Array<number> должно вызываться с number

Также код, подобный этому:

let arr = []
arr.forEach((item: any) => item) // OK

не будет выдавать ошибку. item типизирован как любой, но это явное, а не имплицитное.

В случае с правилами линтера они просто заставляют вас добавить определение типа, поэтому этот код [1,2,3].map(item => item) пройдет компиляцию, однако linter будет makr как ошибка.

...