如果结果不如你所愿,就在尘埃落定前奋力一搏。——《夏目友人帐》
文档:
https://www.typescriptlang.org/docs/handbook/2/objects.html#intersection-types
让我们用中文来解释这两个例子的区别,并通过几个例子帮助你理解。
交集类型
代码语言:javascript复制type Bar = { x: number };
type Baz = { y: number };
type Foo = Bar & Baz;
- 结果
Foo
类型:{ x: number; y: number }
- 解释:
Foo
是Bar
和Baz
的交集类型。它必须同时拥有x
和y
两个属性。
示例:
代码语言:javascript复制const obj: Foo = { x: 5, y: 10 }; // 合法
const obj2: Foo = { x: 5 }; // 非法,因为缺少 `y`
联合类型
代码语言:javascript复制type Foo = { x: number };
type Baz = { y: number };
type Bar = Foo | Baz;
- 结果
Bar
类型:{ x: number } | { y: number }
- 解释:
Bar
是一个联合类型,这意味着它可以是Foo
或Baz
。它可以只包含x
,或只包含y
,但不能同时包含两个属性。
示例:
代码语言:javascript复制const obj: Bar = { x: 5 }; // 合法
const obj2: Bar = { y: 10 }; // 合法
const obj3: Bar = { x: 5, y: 10 }; // 非法,因为联合类型只能是 `Foo` 或 `Baz` 之一
总的来说
- 交集类型(
&
):要求所有类型的属性都存在。 - 联合类型(
|
):允许类型是其中之一。