gpt4 book ai didi

typescript - 为什么 bool 值变为真?

转载 作者:搜寻专家 更新时间:2023-10-30 20:37:53 24 4
gpt4 key购买 nike

看看下面的code :

export class Smth {
private flag: boolean;

public update() {
this.flag = true;

this.inner();

if (this.flag === false) { // Operator '===' cannot be applied to types 'true' and 'false'.
console.log(123);
}
}

private inner() {
this.flag = false;
}
}

我不明白这条线有什么问题

if (this.flag === false)

typescript 说

Operator '===' cannot be applied to types 'true' and 'false'.

但实际上有booleanfalse

我使用的是 typescript 2.6.2,但在线 Playground 显示的结果与 2.7 相同。


它不是 Operator '==' cannot be applied to types x and y in Typescript 2 的副本因为这个问题是关于比较常量的。但在我的代码中,它是一个可更改的类字段,并且有一个函数可以更改值。而且,它被称为。

this.flag = true;

this.inner(); // exectues this.flag = false;

if (this.flag === false) { // ... types 'true' and 'false'. - WHY?

最佳答案

TypeScript 有点聪明,因为它对您的方法进行了静态分析,并且它会发现除了 false 之外,您从未分配任何东西,至少在这个闭包或上下文中 - 使类型定义假定您的变量类型为 false 而不是 boolean。它不会查找内部调用方法的变化。

将定义想象成是这样全局声明的:

export type boolean = true | false

false只是false,没有true

有几种解决方法:

  1. 从一开始就在类声明中分配类型,如下所示:

    class MyClass {
    private flag: boolean = true
    ...
    }
  2. 只是不要测试直接相等性,单独使用 bool 值:

    if (!this.flag) // instead of this.flag === false

关于typescript - 为什么 bool 值变为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48626568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com