【问题标题】:boolean comparison generates TS2365 error布尔比较生成 TS2365 错误
【发布时间】:2018-12-21 04:35:20
【问题描述】:

下面的代码在if (b === true) 上得到TS2365: Operator '===' cannot be applied to types 'false' and '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。

为什么会出现这个错误?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    这是 typescript 进行流分析以确定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
    
    }
    

    【讨论】:

      【解决方案2】:

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

      b===true
      

      始终为 false,因为 TypeScript 引擎不会将 b 解释为布尔值,除非您明确指定它,因为 === 运算符也会检查操作数类型的相等性。

      所以我认为,下面的代码也应该可以工作:

      b == true
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-28
        • 2012-08-19
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        相关资源
        最近更新 更多