Unions and Intersection types
注意: Unions 和 Intersection 使用在 primitive type 和 object 的表現會「感覺」不太一樣
Unions 聯集 (OR)
- 能夠符合其中一種型別即可。
- 使用垂直線
|
來組合多個類型。例如,string | number 表示變數可以是字符串或數字。
Intersection 交集 (AND)
- 要同時符合多個型別。
- 使用
&
符號來組合多個類型。 - 對於 primitive type ,通常用 & 會變成 never,因為不可能同時滿足兩個 primitive type。
- 對於 object,它必須同時具有所有類型的屬性,缺一不可。例如,TypeA & TypeB 表示一個值需同時具有 TypeA 和 TypeB 的特性。
/** 對於 primitive type 來說 */
type UnionPrimitive = string | number; // string | number
type IntersectionPrimitive = string & number; // never
/** 對於 object type 來說 */
type Circle = {
color: string;
radius: number;
};
type Rectangle = {
color: string;
width: number;
height: number;
};
// 只需符合 Circle 的屬性或 Rectangle 的屬性即可
const foo: Circle | Rectangle = {
color: "red",
radius: 15,
height: 20,
};
// 需要同時帶有 Circle 和 Rectangle 中的屬性(缺一不可)
const bar: Circle & Rectangle = {
color: "red",
radius: 15,
width: 30,
height: 20,
};