在我的 tsconfig.json 中,我设置了 "noImplicitAny": true
。但是以下代码不会产生错误:
let x;
x = 5;
x = "a";
x = null;
console.log(x);
这里的x
不是隐式设置为any
(与显式设置相反,我会在其中编写let x: Any;
)?
我知道,由于赋值不同,编译器可以在编译时推断 Any
,但我认为选项 "noImplicitAny": true
用于防止这种推断。
在这种情况下是否有其他编译器选项显示错误?
最佳答案
Typescript 可能会根据上下文推断变量是其实际类型的子类型:
let a: number | number[] = 0;
if (!Array.isArray(a)) a = [a];
void a;
// ^?
// let a: number[] | (number & any[])
a = 123;
void a;
// ^?
// let a: number
if (a === 999) {
void a;
// ^?
// let a: 999
}
function f() {
// doesn't work in functions:
void a;
// ^?
// let a: number | number[]
}
如果您将变量类型定义为未知
,子类型将停止用于赋值。
如果将变量类型定义为 any
子类型将停止在任何地方工作。
如果您不编写类型,它将从您分配的值中获取。
但是,如果您根本不定义变量类型,它将是可子类型的 any
关于typescript - 为什么在使用隐式 Any 时 Typescript 不显示错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76637367/