我的代码:
function test() {
let value: number;
for (let i = 0; i < 10; i++) {
value = i;
console.log(value);
}
return value;
}
test();
得到了这个:
Variable 'value' is used before being assigned
我发现这很奇怪,因为我看到了其他类似的问题,它们要么使用回调,要么使用允诺,或者使用其他异步方法,而我只使用同步for循环。
function test() {
let value: number;
for (let i = 0; i < 100; i++) {
// a() is very expensive and with some effects
const result = a(i)
if(i===99) {
value = result
}
}
return value;
}
发布于 2021-11-19 03:04:49
发布于 2021-11-19 03:05:24
TypeScript不能推断循环体中的任何东西都在运行--它不检查i
是否从0开始,条件是i < 10
,因此身体至少会运行一次。此行为非常类似于以下内容:
function test() {
let value: number;
if (Math.random() < 0.5) {
value = 5;
}
return value;
}
这会产生同样的错误。
要想让TS知道值确实是在末尾定义的,您需要使它完全明确。通常,实现这一目标的最佳方法是使用const
,通过数组方法和助手函数一次定义变量并将其赋值-- TS在最小化重新分配时效果最好。
https://stackoverflow.com/questions/70029328
复制相似问题