javascript - 打字稿说:“类型'“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."
他们在说什么?
解决方案
在 TypeScript"a"
中是文字类型。它是一种只有一个值的类型,即"a"
. 等效于"b"
。
由于您初始化value
TypeScript 的方式,认为类型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"
有一些重叠。
推荐阅读
- powershell - 数组中的包含比较不起作用
- android - Serivce、WorkManger 和 JobScheduler 之间的差异
- c# - 将 Observable 对象集合绑定到 RadTreeListView
- css - CSS 和 img 不要在 Github 上阅读
- django - Django Auth:如何创建多对多关系模型?
- odoo - Odoo 12 - 类型错误:create() 缺少 1 个必需的位置参数:'vals'
- xamarin - 当 CrossSimpleAudioPlayer 播放时,WkWebView 暂时禁用
- firebase - 我正在使用流提供程序和 Navigator.push(),如何检测新路由中流的更改
- python - “ctypes\__init__.py”,第 364 行,在 __init__ OSError: [WinError 126] The specified module could not be found While running pyinstaller executable
- python - how to slice data frame by row number and aggregate in pandas