为什么typescript会忽略数组回调中对局部变量的修改



特别是

function foo(a: number[]) : number {
let result = false;
a.forEach((x) => {
if (x === 5) {
result = true;
}
});
// Here ts reports:
// "This condition will always return 'false' 
// since the types 'false' and 'true' have no
// overlap"
if (result === true) {
return 1;
}
return 0;
}

在上面的例子中,tsc认为结果不能取值true,尽管回调中有赋值。这是一个游乐场链接

我意识到我可以使用例如Array#some重写上面的内容,但在我的实际代码中,我使用map来产生结果,这节省了在数组上的第二次传递,只是为了设置一个标志。

有没有办法让它认识到回调可能已经被调用了?

您只是在另一个被阻止的范围(foreach回调(中修改result

TS无法知道何时调用此回调。这将取决于功能的实现。

有一个古老的开放式建议可以提高编译器对直接调用方法的理解。

此外,除非您的数组很大,否则总是喜欢可读性而不是过早优化,这里是map+some

最新更新