Typescript 布尔比较生成TS2365错误

Typescript 布尔比较生成TS2365错误,typescript,Typescript,下面的代码获取TS2365:运算符“==”不能应用于类型“false”和“true”。if(b===true)上的错误 设b=false; 设arr=[1,2,3,4,5]; arr.forEach(val=>{ if(val{ if(val

下面的代码获取
TS2365:运算符“==”不能应用于类型“false”和“true”。
if(b===true)上的错误

设b=false;
设arr=[1,2,3,4,5];
arr.forEach(val=>{
if(val<3){
b=正确;
}
});
如果(b==true){//生成TS2365错误
}
我已阅读并理解,如果条件从未满足,Typescript将生成此错误

但条件将得到满足,因为
arr
的值小于3


为什么会出现此错误?

这是typescript进行流分析以确定
b
的分配方式的一个限制。这样的分析并没有交叉作用的奖金。看

一个简单的解决方案是在分配
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

}
设b=false为布尔值;
设arr=[1,2,3,4,5];
arr.forEach(val=>{
if(val<3){
b=正确;
}
});
如果(b==true){//ok
}

用简单的语言编写,下面的代码部分

b===true
始终为false,因为TypeScript引擎在显式指定之前和除非显式指定它,否则不会将b解释为布尔值,因为===运算符也会检查操作数类型的相等性

因此,我认为以下代码也应该起作用:

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

b == true