下面的代码在TS2365: Operator '===' cannot be applied to types 'false' and 'true'.
上出现if (b === true)
错误。
let b = false;
let arr = [1, 2, 3, 4, 5];
arr.forEach(val => {
if (val < 3) {
b = true;
}
});
if (b === true) { // generates TS2365 error
}
我已阅读this post,并且我了解如果条件不满足,Typescript会产生此错误。
但是该条件将得到满足,因为arr
的值小于3。
为什么会出现此错误?
答案 0 :(得分:2)
这是打字稿进行流量分析以确定b
分配方式的限制。这样的分析并不涉及职能上的好处。参见this discussion。
一种简单的解决方案是在分配b
时使用类型断言。
let b = false as boolean;
let arr = [1, 2, 3, 4, 5];
arr.forEach(val => {
if (val < 3) {
b = true;
}
});
if (b === true) { // ok
}
答案 1 :(得分:0)
以简单的语言将其放入以下代码部分
b===true
始终为假,因为TypeScript Engine不会将b解释为布尔值,除非您明确指定,否则,因为===运算符还要检查操作数类型的相等性。
因此,根据我的说法,以下代码也应起作用:
b == true
因为它会自动执行操作数的类型转换。