在TypeScript中使用基本类型布尔值混淆行为

时间:2017-11-09 12:55:11

标签: typescript

从TypeScript网页:“最基本的数据类型是简单的true / false值,JavaScript和TypeScript调用一个布尔值。”

好的,到目前为止一切都很好,它就像JS或Java中的普通布尔值,但当我这样做时:

var a = false; // boolean
// alternative declaration
// var a: boolean = false; 

// ... do whatever with "a"

if (a == true) // or using ===
{
    console.log("true");
}

我收到一条错误消息: 运算符'=='不能应用于类型'false'和'true'。 一种可能的解决方案是将“a”投射到任何一个,因为这有效:

if ((a as any) == true)

这里发生了什么?

2 个答案:

答案 0 :(得分:1)

您不需要将真/假值与== / ===进行比较,因为它们本身已经是布尔值。从而使它变得多余。

所以只需if (a)if (!a)

typescript只想以这种方式优化你的代码。在vanilla JS中,if (a === true)

完全没问题

答案 1 :(得分:1)

请参阅https://github.com/Microsoft/TypeScript/issues/11178#issuecomment-249877718

  

这是按预期工作的。编译器执行控制流分析,并且知道p具有实际值Place.Left,您正在执行===操作,并且它正在调用比较已知为Place.Left的值是没有意义的。到一个已知为Place.Right的值。它实际上就像写Place.Left === Place.Right或1 === 2,两者都会产生错误。

您收到错误消息,因为TypeScript还会警告可能的开发人员错误。当您将a设置为 false (并且从不更改它)时,检查a == true是没有意义的,因为在您的代码中永远不会这样。从本质上讲,TypeScripts会警告你死代码。