Typescript 为什么不';难道布尔人表现得像布尔人吗?
使用TypeScript 3.9.5时,我遇到了TS错误: TS2365:运算符“!=”无法应用于类型“false”和“true” 简化示例(代码不做任何事情,但表示实际函数的流程): 我发现了一些讨论这个问题的问题,但它们都涉及更复杂的场景,我看不出它们是如何应用到我非常简单的示例中的Typescript 为什么不';难道布尔人表现得像布尔人吗?,typescript,Typescript,使用TypeScript 3.9.5时,我遇到了TS错误: TS2365:运算符“!=”无法应用于类型“false”和“true” 简化示例(代码不做任何事情,但表示实际函数的流程): 我发现了一些讨论这个问题的问题,但它们都涉及更复杂的场景,我看不出它们是如何应用到我非常简单的示例中的 为什么typescript不处理一个问题?“真”和“假”从何而来?这在我之前就发生过,但只有当我(错误地)做了这样的事情时: let x: true; let y: false; if (x === false
为什么typescript不处理一个问题?“真”和“假”从何而来?这在我之前就发生过,但只有当我(错误地)做了这样的事情时:
let x: true;
let y: false;
if (x === false) {
//...whatever...
}
正如您在代码段中所看到的,我将x
和y
声明为true
和false
类型的变量,而不是像下面这样赋值:
let x = true;
let y = false;
if (x === false) {
//...whatever...
}
确保你没有犯同样的错误。有时这种愚蠢的错误很难发现。
此条件将始终返回“false”,因为类型为“true”和
“false”没有重叠
没什么大不了的,typescript以其卓越的流控制分析再次试图超越我
let allStatementsMatched:boolean=true;
显然那没用。奇怪的是,就这个变量的作用域而言,这会使它变得安静
让allStatementsMatched=true作为布尔值;
看起来
true
/false
不尊重显式类型声明,您必须强制转换它们才能使其工作 谢谢你的回答,但这不适用于我的情况。即使我声明allStatementsMatched:boolean=true
我也会得到同样的错误。奇怪的是,它似乎不相信foreach
可以改变allStatementsMatched
的状态;如果我将allStatementsMatched=false
放在foreach之外,它就会理解allStatementsMatched
可以是“false”。对meI来说似乎是一个bug,我不确定typescript为什么在这里给出可疑的控制流分析,但需要注意的是,直接将一个布尔值与另一个布尔值进行比较是一种不好的形式。如果(!allStatemetsMatched),则只需使用,这样不仅可读性更好,而且还可以消除此错误。
let x = true;
let y = false;
if (x === false) {
//...whatever...
}