我对这个名字有点困惑交叉口类型在打字稿中。
在集合论中,交集意味着只有两种类型共有的属性在两者的交集中才可用。
事实上,如果我在基元之间创建交集,这就是 Typescript 的行为方式。
type A = string | number
type B = number | boolean
type C = A & B
type D = string
type E = number
type F = D & B
在这种情况下,TS 推断C
to be number
, and F
to be never
.
然而,当涉及到对象时,创建交集会创建一个新的类型/接口,它结合了所用类型的属性 -
从文档中
TypeScript 提供了另一种称为交集类型的构造,主要用于组合现有的对象类型
当您以这种方式看待时,对象的行为就非常有意义了。并使用&
也有道理。
所以,我的问题是:
- 为什么会有这样的行为seem对于对象和
原始人?
- 为什么选择“交叉点”这个名字?
也许这与这个解释有某种关系联合类型 ?
两个集合之间的交集将产生两个集合中的元素。
类型只是值集的描述。
所以对于原语的交集string & number
,两者的值分别是多少string
集和number
设置,即。可以同时是string
and number
同时。答案是没有这样的价值。所以我们得到never
(空集)
对于对象类型,结果有点不同。对象类型描述了值必须至少具有该类型所描述的属性的集合。所以集合中的值{ name: string, onlyA: string[] }
可以拥有财产onlyB
,但他们不需要拥有它(ex).
回到路口ObA & ObB
,该交集中的值必须满足以下两个描述ObA
and ObB
。所以这个集合中的值将是来自ObA
也有一个onlyB
属性,以及来自的值ObB
也有一个onlyA
财产。基本上满足两个集合描述的值,与基元不同,对于对象类型,我们可以通过创建具有两种类型属性的对象来构造这些值。
My tsconf 研讨会从您可能会感兴趣的“类型作为集合”部分开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)