如何关闭错误 TS2367:此比较似乎是无意的,因为类型“true”和“false”没有重叠

1.2*_*tts 0 typescript

如何忽略或关闭此错误或使其成为警告而不是错误?

因为它,我的应用程序将无法编译。

TS2367:这种比较似乎是无意的,因为类型“true”和“false”没有重叠。

这是一个例子

var includeTestInfo = true;
var test = "";

if (includeTestInfo==false) {
  test = "test";
}
Run Code Online (Sandbox Code Playgroud)

看起来,忽略特定错误是一个开放的功能请求

类似但不一样的帖子在这里

从这篇文章中获得的一些建议:

  • tsconfig.json 选项忽略特定错误
  • tsignore 注释,带有忽略错误代码的选项
  • tsconfig.json 将特定错误转换为警告
  • 支持警告的打字稿
  • 用于全局跟踪外部文件夹中未嵌入内联的所有错误的打字稿(来自github问题中评论的摘要)
  • 添加或链接到代码注释中错误的解决方案

Ale*_*yne 5

TypeScript 在这里是正确的。TypeScript知道includeTestInfo只能是true.

这:

var includeTestInfo = true;
Run Code Online (Sandbox Code Playgroud)

创建一个类型为 的变量boolean,但该类型被缩小true到此范围内,因为 TypeScript 知道没有其他分配给它。

然后你做:

if (includeTestInfo === false) ...
Run Code Online (Sandbox Code Playgroud)

TypeScript 知道这true永远不会发生false,并认为这可能是一个错误。


禁用类型错误通常是一个坏主意。最好正确解决这个问题。

功能等效的代码片段如下:

var includeTestInfo = true;
var test = "";

if (!includeTestInfo) { // fine
   test = "info";
}
Run Code Online (Sandbox Code Playgroud)

这没有警告,因为即使 TypeScript 知道变量是真/假,它也始终允许真/假检查。这可以让您解决这种类型缩小的布尔值的怪癖。

有人可能会说,99% 的情况下,无论如何都不建议将布尔值与布尔文字进行比较,但这会成为观点,所以我不会发表意见。


或者您可以断言true as boolean,这将阻止编译器将值的类型缩小为true

var includeTestInfo = true as boolean;
var test = "";

if (includeTestInfo === false) { // fine
   test = "info";
}
Run Code Online (Sandbox Code Playgroud)

但这有点笨拙。


最后,应该指出的是,这是 TypeScript 隐式缩小类型的一个怪癖boolean。对于字符串则不然,例如:

var includeTestInfo = 'a';
var test = "";

if (includeTestInfo === 'b') { // fine
   test = "info";
}
Run Code Online (Sandbox Code Playgroud)

可能有一个 GitHub 问题解释了这种差异及其存在的原因,但我目前还没有找到。