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/