在 TypeScript 中,联合类型(union type)和交集类型(intersection type)是两种组合类型,它们可以用来表示一个值或变量的类型是多个类型中的一个或全部。它们的语法和含义如下:
• 联合类型使用 | 符号来连接多个类型,表示一个值或变量的类型可以是这些类型中的任意一个。例如:
type Color = "red" | "green" | "blue"; // Color 类型是 "red","green" 或 "blue" 中的一个
let color: Color = "red"; // ok
color = "green"; // ok
color = "yellow"; // error,"yellow" 不属于 Color 类型
• 交集类型使用 & 符号来连接多个类型,表示一个值或变量的类型必须同时满足这些类型的所有条件。例如:
type Point = { x: number; y: number }; // Point 类型是一个对象,有 x 和 y 两个属性,都是 number 类型
type Circle = { radius: number }; // Circle 类型是一个对象,有 radius 一个属性,是 number 类型
type PointInCircle = Point & Circle; // PointInCircle 类型是 Point 和 Circle 的交集,也就是一个对象,有 x, y, radius 三个属性,都是 number 类型
let pic: PointInCircle = { x: 0, y: 0, radius: 10 }; // ok
pic = { x: 1, y: 2 }; // error,缺少 radius 属性
pic = { radius: 5 }; // error,缺少 x 和 y 属性
联合类型和交集类型的使用场景和优势如下:
• 使用联合类型可以表示一个值或变量的类型不确定或可变的情况,例如用户输入,函数参数,函数返回值等。联合类型可以让 TypeScript 更好地处理这些情况,并且提供更严格的类型检查和推断。
• 使用交集类型可以表示一个值或变量的类型需要同时满足多个条件的情况,例如混入(mixin),扩展(extend),约束(constraint)等。交集类型可以让 TypeScript 更好地实现这些功能,并且提供更灵活的类型组合和操作。