Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 为什么不';难道布尔人表现得像布尔人吗?_Typescript - Fatal编程技术网

Typescript 为什么不';难道布尔人表现得像布尔人吗?

Typescript 为什么不';难道布尔人表现得像布尔人吗?,typescript,Typescript,使用TypeScript 3.9.5时,我遇到了TS错误: TS2365:运算符“!=”无法应用于类型“false”和“true” 简化示例(代码不做任何事情,但表示实际函数的流程): 我发现了一些讨论这个问题的问题,但它们都涉及更复杂的场景,我看不出它们是如何应用到我非常简单的示例中的 为什么typescript不处理一个问题?“真”和“假”从何而来?这在我之前就发生过,但只有当我(错误地)做了这样的事情时: let x: true; let y: false; if (x === false

使用TypeScript 3.9.5时,我遇到了TS错误:

TS2365:运算符“!=”无法应用于类型“false”和“true”

简化示例(代码不做任何事情,但表示实际函数的流程):

我发现了一些讨论这个问题的问题,但它们都涉及更复杂的场景,我看不出它们是如何应用到我非常简单的示例中的


为什么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...
}