首页 > 解决方案 > 打字稿说:“类型'“a”'和'“b”'没有重叠”。这是什么意思?

问题描述

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 overlap."

他们在说什么?

标签: javascripttypescript

解决方案


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

由于您初始化valueTypeScript 的方式,认为类型value"a" | "b"联合类型,基本上意味着值必须是 type"a"或 type "b"

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

这意味着 的条件else if肯定会作用于 type (and value) 的值"a"。现在您将 type"a"的值与type 的值进行比较"b"

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

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

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


推荐阅读