打字稿:交集 - 对命名感到困惑
Typescript: Intersection - Confused about the naming
我对 Typescript 中的名称 Intersection Types 有点困惑。
在集合论中,交集意味着只有两种类型共有的属性在两者的交集中可用。
事实上,如果我在基元之间创建交集,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
推断为 number
,将 F
推断为 never
。
但是,当涉及到对象时,创建交集会创建一个新的 type/interface,它结合了所用类型的属性 -
来自文档
TypeScript provides another construct called intersection types that is mainly used to combine existing object types
当您以这种方式查看时,对象的行为非常有意义。使用 &
也很有意义。
所以,我的问题是:
- 为什么对象的行为 似乎 和
原语?
- 为什么选择 intersection 这个名字?
也许这与 Union types 的解释有某种关系?
两个集合之间的交集将产生两个集合中的元素。
类型只是值集的描述。
那么对于原语 string & number
的交集,string
集合和 number
集合中的值是什么,即。可以同时是 string
和 number
。答案是没有这样的价值。所以我们得到 never
(空集)
对于对象类型,结果略有不同。对象类型描述集合,其中值必须至少具有类型描述的属性。因此集合 { name: string, onlyA: string[] }
中的值可以有一个 属性 onlyB
,但它们不是必需的 (ex).
回到交集ObA & ObB
,这个交集的值必须同时满足ObA
和ObB
的描述。因此,此集合中的值将是 ObA
中也有 onlyB
属性 的值,以及 ObB
中也有 onlyA
属性.基本上满足两个集合描述的值,对于不同于基元的对象类型,我们可以通过创建具有两种类型的属性的对象来构造。
我的 tsconf workshop 以您可能会感兴趣的“作为集合的类型”部分开头。
我对 Typescript 中的名称 Intersection Types 有点困惑。
在集合论中,交集意味着只有两种类型共有的属性在两者的交集中可用。
事实上,如果我在基元之间创建交集,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
推断为 number
,将 F
推断为 never
。
但是,当涉及到对象时,创建交集会创建一个新的 type/interface,它结合了所用类型的属性 -
来自文档
TypeScript provides another construct called intersection types that is mainly used to combine existing object types
当您以这种方式查看时,对象的行为非常有意义。使用 &
也很有意义。
所以,我的问题是:
- 为什么对象的行为 似乎 和 原语?
- 为什么选择 intersection 这个名字?
也许这与 Union types 的解释有某种关系?
两个集合之间的交集将产生两个集合中的元素。
类型只是值集的描述。
那么对于原语 string & number
的交集,string
集合和 number
集合中的值是什么,即。可以同时是 string
和 number
。答案是没有这样的价值。所以我们得到 never
(空集)
对于对象类型,结果略有不同。对象类型描述集合,其中值必须至少具有类型描述的属性。因此集合 { name: string, onlyA: string[] }
中的值可以有一个 属性 onlyB
,但它们不是必需的 (ex).
回到交集ObA & ObB
,这个交集的值必须同时满足ObA
和ObB
的描述。因此,此集合中的值将是 ObA
中也有 onlyB
属性 的值,以及 ObB
中也有 onlyA
属性.基本上满足两个集合描述的值,对于不同于基元的对象类型,我们可以通过创建具有两种类型的属性的对象来构造。
我的 tsconf workshop 以您可能会感兴趣的“作为集合的类型”部分开头。