这是一个基本用例:用 null 初始化一个变量,然后在某个嵌套循环/函数中更改值:
let a: number | null = null;
[1].forEach(() => {
a = 1;
});
if (a != null)
a.toFixed(); // Error: Property 'toFixed' does not exist on type 'never'.
但是 typescript 将 a
的类型推断为 never
。我会假设没有 if
它会假设它是 null | number
在这种情况下,我可能会收到一条错误消息,指出该属性在 null 上不存在,但为什么它假设它永远不会仅基于初始分配值。
我做错了什么吗?
最佳答案
如果您绝对确定 a
在那里有一个值,那么您可以将 !
放在变量后面
let a: number | null = null;
[1].forEach(() => {
a = 1;
});
if (a !== null)
a!.toFixed(); //
我不会使用null
,而是undefined
,所以不需要使用!
let a: number | undefined;
[1].forEach(() => {
a = 1;
});
if (a) { // <-- if undefined or 0
a.toFixed(); // No problem here
}
同时建议使用 !==
而不是 !=
关于Typescript - 错误地推断 'never',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54769781/