如何忽略或关闭此错误或将其设为警告而不是错误?
如果因为它,我的应用程序将无法编译。
TS2367:这种比较似乎是无意的,因为类型 “真”和“假”没有重叠。
这是一个例子:
var includeTestInfo = true;
var test = "";
if (includeTestInfo==false) {
test = "test";
}
看起来,忽略一个特定的错误是一个open feature request?
相似但不相同的帖子here.
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 问题解释了这种差异及其存在的原因,我目前找不到。