混淆了“此条件将始终返回'false',因为类型'a''和'b''没有重叠'”的逻辑。

Confusion over the logic of "This condition will always return 'false' since the types '"a"' and '"b"' have no overlap."

提问人:blankpage 提问时间:3/16/2021 更新时间:3/16/2021 访问量:3408

问:

我刚开始学习 TypeScript,目前正在阅读手册。其中一点是 TypeScript 捕获逻辑错误,它给出了这个例子:

const value = Math.random() < 0.5 ? "a" : "b";
if (value !== "a") {
  // ...
} else if (value === "b") {
  // This condition will always return 'false' since 
  // the types '"a"' and '"b"' have no overlap.
  // Oops, unreachable
}

可能只是我没有直接看到一些东西,但我不明白为什么这会引发错误。以下是我的看法:

  • value可以是 或ab
  • 第一个 if 语句检查 if 不是valuea
  • else-if 语句检查值是否 ,如果不是,则始终是 (if is not ;bavalueab)

那么为什么它说会一直回来呢?显然,这与我所看到的方式不同;似乎我错过了什么。此外,我不完全确定这意味着什么,所以如果有人能帮助我理解这些,将不胜感激。value === "b"falseoverlap'"a"' and '"b"' have no overlap

JavaScript TypeScript IF-语句 逻辑

评论

9赞 Heretic Monkey 3/16/2021
else基本上,永远不会出现这样的情况(如果返回为 false,则必须如此)和 (如果返回为 true,则必须如此)。只有当第一个条件返回 false(在 JavaScript 的情况下为 falsy)时,才会读取该分支。value === "a"value !== "a"value === "b"value === "b"elseif
1赞 blankpage 3/16/2021
@HereticMonkey - 哎呀,我怎么没看到🤦 ♂️......显然和这种情况是一样的......谢谢你清理这个问题。value !== "a"value === "b"
0赞 Cihat Şaman 3/29/2021
@blankpage怎么样?常量值 = Math.random() < 0.5 ?“a” : “b”;if (value !== “a”) { } else if (value !== “b”) { } 1)第一个 if 语句检查该值是否不是 2)第二个 if-else 语句检查该值是否不是 b 如果您能解释逻辑错误,我将不胜感激
2赞 marsnebulasoup 3/30/2021
@CihatŞaman,可以是“a”或“b”,具体取决于。因此,如果不是“a”,那么它必须是“b”。对于要调用的第一个 if 语句,即 if 不是 “a”,那么它必须是 “b”。因此,每当是“b”时,就会计算第一个。这意味着当到达第二个语句时,它不能是“b”,因为这样就会调用第一个语句。因此,它必须是“a”,因此如果达到第二个语句,则其计算结果将始终为 true。所以,在这种情况下没有必要有一个;只需将其替换为 ,它就可以工作了。valueMath.random()valuevaluevalueifvalueelse-ifelse
0赞 wlnirvana 4/27/2022
stackoverflow.com/q/67196091 的可能重复

答: 暂无答案