【问题标题】:Why an else if clause results in a "this condition will always return 'true'" error?为什么 else if 子句会导致“此条件将始终返回 'true'”错误?
【发布时间】:2021-04-08 06:25:24
【问题描述】:

手册基础知识中的一个主题是 TypeScript 捕获逻辑错误。我将if...else 语句的else if 子句从example in the handbook 更改为以下内容:

const value = Math.random() < 0.5 ? "a" : "b";
if (value !== "a") {

} else if (value !== "b") {
    
}

但出现错误:

“此条件将始终返回 'true',因为类型 '"a"' 和 '"b"' 没有重叠。”

我错过了什么?另外,它在 JavaScript 中工作,为什么它不能在 TypeScript 中工作?

【问题讨论】:

  • 你不需要第二个if,因为只有两个可能的选项
  • 我知道我不需要第二个 if 但为什么它看起来像一个错误所以我很困惑。 Typescript 让我免于编写更多代码,因此它显示为错误?

标签: typescript logic control-flow


【解决方案1】:

这是控制流分析和类型缩小的一部分。

Typescript 最初会将value 键入为"a" | "b"value !== "a" 检查意味着在真分支上value 将是"b",因此它将键入值仅"b",在假分支上它将键入为"a",因为会输入任何其他内容真正的分支。

这意味着您正在检查的东西总是正确的(value !== b,总是正确的,因为 value"a"),并且 typescript 会警告您。

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2019-05-12
    • 2021-12-06
    • 2016-05-10
    相关资源
    最近更新 更多