Typescript编译器错误地假定为假值
我遇到了一个问题,typescript编译器假设变量始终为false,因为它是如何声明的 代码相当简单,为了引入错误,我必须使用外部库来修改声明的变量。在这种情况下,我使用的是lodashTypescript编译器错误地假定为假值,typescript,Typescript,我遇到了一个问题,typescript编译器假设变量始终为false,因为它是如何声明的 代码相当简单,为了引入错误,我必须使用外部库来修改声明的变量。在这种情况下,我使用的是lodash import * as _ from 'lodash'; // as an example let p = ["One", "Two"]; let result = false; _.each(p, s => { if (s === "Two") { result = tru
import * as _ from 'lodash'; // as an example
let p = ["One", "Two"];
let result = false;
_.each(p, s => {
if (s === "Two") {
result = true;
return;
}
});
if (result === true) { // Compiler error - this condition will always return false
// do something.
}
出现了一些github问题:
这些看起来都比上面简单的复制品要复杂一些。这是TypeScript的预期行为吗?看来这里还不够。我很确定这不会发生在版本2中
附近有工作吗?我做错什么了吗
目前我正在使用TypeScript 3.2.1版将您的代码更改为:
let result = false as boolean;
typescript抱怨的原因是它认为自己比实际情况更聪明,即它看到您将false
值赋给结果
变量,但它没有看到回调函数中的操作
我真的不知道Typescript团队为什么这样做。他们肯定有他们的理由,但他们也错过了你的例子
可能TS认为操作
。
由于回调,每个都是异步的,但当然不是所有涉及回调的操作都是异步的。解决方法:使用让结果=uuuu.some(p,s=>s=='Two')代码>:)您可以使用来。。。当然,那肯定会更干净。而且更优雅。然而,我使用这个例子更多的是为了演示,而不是实际生活中的使用。谢谢Nurbol。这就解决了问题。尽管我仍然不相信这个问题需要解决。至于原因,这里已经讲了:@NeilWatson哦,在TS中有太多不完美的东西(就像在生活中一样)。但总的来说还是不错的。@Aaron你能指出问题的确切位置吗?我很好奇。