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

问题描述 投票:0回答:1

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

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

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

这是一个例子

var includeTestInfo = true;
var test = "";

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

看起来,忽略一个特定的错误是一个open feature request?

相似但不相同的帖子here.

typescript
1个回答
0
投票

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 总是允许真/假检查,即使它知道一个变量为真/假。这使您可以解决这种缩小布尔值类型的怪癖。

它可能会争辩说,99% 的时间都不会建议将布尔值与布尔文字进行比较,但这已成为一种观点,所以我不会发表意见。


或者您可以断言

true
as 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 问题解释了这种差异及其存在的原因,我目前找不到。

© www.soinside.com 2019 - 2024. All rights reserved.