tslints "typedef" 和 typescript 编译器 "noImplicitAny" 有什么区别?
What is the difference between tslints "typedef" and typescript compilers "noImplicitAny"?
我正在使用 tslint 来检查我的 typescript 代码。我已经搜索了一段时间,但找不到使用 typescript 编译器选项 noImplicitAny
和 tslint 中的以下配置之间存在的差异(如果有的话):
"no-inferrable-types": [true]
"typedef": [
true,
"property-declaration",
"variable-declaration",
// ... etc ...
]
存在差异,而且差异很大。
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
是任意类型,但它是显式的,而不是隐式的。
在 linter 规则的情况下,它们只是强制您添加类型定义,因此此代码 [1,2,3].map(item => item)
将通过编译,但是 linter 将 makr 视为错误。
我正在使用 tslint 来检查我的 typescript 代码。我已经搜索了一段时间,但找不到使用 typescript 编译器选项 noImplicitAny
和 tslint 中的以下配置之间存在的差异(如果有的话):
"no-inferrable-types": [true]
"typedef": [
true,
"property-declaration",
"variable-declaration",
// ... etc ...
]
存在差异,而且差异很大。
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
是任意类型,但它是显式的,而不是隐式的。
在 linter 规则的情况下,它们只是强制您添加类型定义,因此此代码 [1,2,3].map(item => item)
将通过编译,但是 linter 将 makr 视为错误。