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

vnjpjtjt  于 2023-05-23  发布在  TypeScript
关注(0)|答案(1)|浏览(1836)

如何忽略或关闭此错误,或使其成为警告而不是错误?
我的应用程序不会编译,因为它。
TS2367:这种比较似乎是无意的,因为类型'true'和'false'没有重叠。
下面是一个例子:

var includeTestInfo = true;
var test = "";

if (includeTestInfo==false) {
  test = "test";
}

看起来,忽略一个特定的错误是open feature request吗?
相似但不相同的文章here
从这篇文章中获得了一些建议:

  • tsconfig.json选项忽略特定错误
  • tsignore注解,带有忽略错误代码的选项
  • tsconfig.json将特定错误转换为警告
  • 支持警告的类型脚本
  • typescript全局跟踪外部文件夹中的所有错误,而不是内嵌(github问题中的注解摘要)
  • 添加或链接到代码注解错误的解决方案
yzuktlbb

yzuktlbb1#

TypeScript在这里正确。TypeScript * 知道 * includeTestInfo只能是true
这是:

var includeTestInfo = true;

创建一个类型为boolean的变量,但该类型在此作用域中被缩小为true,因为TypeScript知道没有其他赋值给它。
然后,您执行以下操作:

if (includeTestInfo === false) ...

TypeScript知道true永远不会是false,并认为这可能是一个错误。
禁用类型错误通常不是个好主意。最好把它修好。
功能等效的代码片段如下:

var includeTestInfo = true;
var test = "";

if (!includeTestInfo) { // fine
   test = "info";
}

这没有警告,因为TypeScript总是允许truthy/falsy检查,即使它知道一个变量是truthy/falsy。这使您可以解决缩小布尔值类型的问题。
可以争辩说,99%的时候,无论如何都不建议将布尔值与布尔值进行比较,但这会成为观点,所以我不会发表意见。
或者您可以Asserttrueas boolean,这将防止编译器将值的类型缩小到true

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

if (includeTestInfo === false) { // fine
   test = "info";
}

但这有点笨拙。
最后,应该注意的是,这是TypeScript隐式缩小boolean类型的一个怪癖。对于字符串,情况并非如此,例如:

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

if (includeTestInfo === 'b') { // fine
   test = "info";
}

可能有一个GitHub问题解释了这种差异以及为什么存在,我目前没有找到。

相关问题