布尔比较会生成TS2365错误

时间:2018-12-21 04:35:20

标签: typescript

下面的代码在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。

为什么会出现此错误?

2 个答案:

答案 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

因为它会自动执行操作数的类型转换。