operator'==='无法应用于类型'false'和'true'

时间:2018-01-30 14:23:22

标签: javascript angular typescript ecmascript-6

我知道下面的代码是愚蠢的。但实时可能在使用相同类型的两个不同数据进行编译时。

if (false === true) {}// getting error
  

运算符'==='不能应用于类型'false'和'true'

但是Object.is()正在接受此不同的数据而没有任何错误,并且它返回false

我知道他们之间的difference。但是为什么打字机语法错误同时为什么Object.is()没有抛出那个错误。

此错误信息也是正确的?或不?

运算符'==='无法应用于类型'false'和'true 。它应该像operator '===' cannot be applied to types 'Boolean' and 'Boolean'

如果邮件错误,那么它在任何升级版本中都解决了吗?一世 m使用typescript 2.0.3版本。

此问题发生在以下方案中

  • 1

    Object.is("string", "string");
    if ("string" === "string1") {
    }
    
  • 2

    Object.is(1, 2);
    if (1 === 2) {
    }
    

等..

2 个答案:

答案 0 :(得分:8)

Typescript基本上是在那里抛出错误,因为它是错误的代码。

true永远不会等于false。打字稿知道这一点,并告诉你修改你的代码。

由于这些是常数值,因此它们被认为属于truefalse类型。错误消息可能有点令人困惑,但它是正确的,同时对Typescript引擎有一些了解。

此代码会出现类似的错误:

if (1 === 2) {}

错误:

  

运算符'==='无法应用于类型'1'和'2'。

比较像throws that error这样的常量:

false === true; // Operator '===' cannot be applied to types 'false' and 'true'.
    1 === 2;    // Operator '===' cannot be applied to types '1' and '2'.
  "a" === "b";  // Operator '===' cannot be applied to types '"a"' and '"b"'.

Object.is===完全不同。 Object.is执行 no 类型强制, 比较两个参数的。由于TypeScript不会使用函数的功能验证这些参数,因此它不会在那里引发错误。

答案 1 :(得分:0)

检查您是否正确声明了布尔变量,我认为您已将其声明为false / true而不是Boolean。 我希望这可以帮助某人。