javascript - typescript 说: "types ' "a "' and ' "b "' have no overlap".是什么意思?

标签 javascript 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
}

在教程中找到此代码。我想了解这个错误的含义:"types '"a"' and '"b"' have no overlay."

他们在说什么?

最佳答案

在 TypeScript 中 "a"a literal type .它是一种只有一个值的类型,即 "a" .等效于 "b" .

由于您的初始化方式value TypeScript 考虑 value 的类型成为 "a" | "b" (一个 union type 基本上意味着该值必须是 "a" 类型或 "b" 类型。

如果 value 的类型(因此也是值) 不是 "a"那么第一个 if 的 block 将被执行。

这意味着 else if 的条件肯定会对类型(和值)"a" 的值进行操作.现在您正在比较 "a" 类型的值具有 "b" 类型的值.

但是 TypeScript 中的值不能是 "a" 类型和类型"b"同时,因为类型没有重叠(这只是另一种说法,没有值可以同时属于两种类型)。

换句话说:TypeScript 发现 value不能是 "b"在那个时候,因此在 else if 之后的第二个 block 永远不会被执行。

作为具有重叠类型的反例,请考虑 string"a" .值 "a"显然是 string 类型.它也是类型的"a" (根据定义)。这意味着类型 string"a" 有一些重叠

关于javascript - typescript 说: "types ' "a "' and ' "b "' have no overlap".是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67196091/

相关文章:

javascript - onCall 云函数返回 'Data cannot be encoded in JSON. NAN'

javascript - 对全景旋转实现阻尼(惯性)

javascript - 如何使用本地存储一次将所有输入字段值存储在一个包装器中?

JavaScript window.open() 不会立即加载窗口

javascript - Angular2管道动态值不取

typescript - 三元运算符和 Vue 过滤器

javascript - 提交图像时删除浏览按钮

javascript - TypeScript + Monaco 编辑器中的未知类型是什么?

typescript - 使用 `import type` 语句修复循环依赖引用错误

typescript - 是否可以选择严格传播对象?