TypeScript 的 & 与 |
2023-09-19 09:15:52
TypeScript 的 &(交叉类型,Intersection Types)与 |(联合类型,Union Types)
在 TypeScript 中,&(交叉类型)和 |(联合类型)是两种非常重要的类型操作符,它们可以让你组合多个类型来创建新的类型。
交叉类型
交叉类型使用 & 操作符来组合多个类型,并创建一个新的类型,该类型具有所有组成类型的属性和方法。例如,以下代码定义了一个 Person 类型,它具有 name 和 age 属性:
interface Person {
name: string;
age: number;
}
现在,我们可以使用 & 操作符来创建一个新的类型,该类型具有 Person 类型的属性,以及一个新的 location 属性:
type PersonWithLocation = Person & {
location: string;
};
PersonWithLocation 类型现在具有 name、age 和 location 属性。我们可以像使用任何其他类型一样使用它:
let person: PersonWithLocation = {
name: "John Doe",
age: 30,
location: "New York"
};
联合类型
联合类型使用 | 操作符来组合多个类型,并创建一个新的类型,该类型可以是组成类型的任何一个。例如,以下代码定义了一个 Shape 类型,它可以是 Circle、Square 或 Triangle:
type Shape = Circle | Square | Triangle;
现在,我们可以使用 Shape 类型来定义一个函数,该函数可以接受任何类型的形状:
function drawShape(shape: Shape) {
// 根据形状类型绘制形状
}
我们可以使用任何类型的形状来调用 drawShape 函数:
drawShape(new Circle());
drawShape(new Square());
drawShape(new Triangle());
交叉类型和联合类型的区别
交叉类型和联合类型之间的一个主要区别是,交叉类型创建了一个新的类型,该类型具有所有组成类型的属性和方法,而联合类型创建了一个新的类型,该类型可以是组成类型的任何一个。
另一个区别是,交叉类型是严格的,这意味着如果一个类型不兼容另一个类型,那么它们就不能组合成一个交叉类型。另一方面,联合类型是不严格的,这意味着即使类型不兼容,它们也可以组合成一个联合类型。
何时使用交叉类型和联合类型
交叉类型可用于创建具有多个类型属性的新类型。例如,你可以使用交叉类型来创建具有名称、年龄和位置属性的 Person 类型。
联合类型可用于创建可以是多个类型的类型。例如,你可以使用联合类型来创建可以是圆形、正方形或三角形的 Shape 类型。
结论
交叉类型和联合类型是 TypeScript 中两种强大的类型系统特性,它们可以让你创建更加灵活和可重用的类型。通过理解这两种类型的区别以及如何使用它们,你可以编写出更强大的 TypeScript 代码。