我的代码:
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
我发现这很奇怪,因为我见过其他类似的问题,要么使用回调,要么使用 Promise 或其他一些异步方法,而我只使用同步 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;
}
TypeScript 无法推断循环体中的任何内容都在运行 - 它不会检查
i
是否从 0 开始,并且条件为 i < 10
,并且循环体将因此至少运行一次。此行为与以下行为非常相似:
function test() {
let value: number;
if (Math.random() < 0.5) {
value = 5;
}
return value;
}
这会产生相同的错误。
为了让 TS 知道该值确实是在最后定义的,您需要使其完全明确。通常,实现此目的的最佳方法是通过数组方法和辅助函数定义并分配给变量 once,使用
const
- 当重新分配最小化时,TS 效果最佳。
我在打字稿中遇到了这个: 这是我的有效解决方案:
let myvariable: string | undefined;
if (typeof myvariable !== 'undefined') {
myvariable += "something appended"
} else {
myvariable = "New beginning"
}