在 TypeScript 中,交叉类型和联合类型是用来处理多个类型的一种机制。交叉类型用于将多个类型合并成一个类型,而联合类型则表示一个值可以是多个类型中的其中一个。
交叉类型
交叉类型使用 &
运算符将多个类型进行合并。例如,我们有一个类型 Person
和一个类型 Worker
:
type Person = {
name: string;
age: number;
};
type Worker = {
company: string;
position: string;
};
我们可以使用交叉类型将这两个类型合并成一个新的类型 Person & Worker
,表示既是 Person
又是 Worker
的对象:
type PersonWorker = Person & Worker;
const personWorker: PersonWorker = {
name: "John",
age: 30,
company: "ABC Corporation",
position: "Engineer",
};
在上述例子中,personWorker
对象既具有 Person
类型的属性 name
和 age
,也具有 Worker
类型的属性 company
和 position
。
交叉类型非常适用于组合多个类型的属性集合,常见的应用场景是处理混合对象。例如,我们有一个 Dog
和一个 Bird
类型:
type Dog = {
name: string;
breed: string;
};
type Bird = {
name: string;
wingspan: number;
};
我们可以使用交叉类型将这两个类型合并成一个新的类型 Animal
,表示 Dog
和 Bird
的共同特征:
type Animal = Dog & Bird;
const animal: Animal = {
name: "Charlie",
breed: "Golden Retriever",
wingspan: 50,
};
在上述例子中,animal
对象既具有 Dog
类型的属性 name
和 breed
,也具有 Bird
类型的属性 wingspan
。
联合类型
联合类型使用 |
运算符将多个类型进行组合。例如,我们有一个类型 NumberOrString
:
type NumberOrString = number | string;
表示一个值可以是 number
类型或 string
类型中的其中一个。
let value: NumberOrString;
value = 10; // OK
value = "hello"; // OK
value = true; // Error: Type 'boolean' is not assignable to type 'NumberOrString'
在上述例子中,value
可以是 number
或 string
类型的值,但不能是其他类型,例如布尔类型。
联合类型非常适用于表示可能有多种类型的值。例如,我们有一个 Shape
类型:
type Shape = Circle | Square;
type Circle = {
kind: "circle";
radius: number;
};
type Square = {
kind: "square";
sideLength: number;
};
表示一个图形可以是圆形或正方形。Shape
类型具有一个 kind
属性,根据 kind
属性的值可以确定是圆形还是正方形。
function area(shape: Shape): number {
switch (shape.kind) {
case "circle":
return Math.PI * shape.radius ** 2;
case "square":
return shape.sideLength ** 2;
}
}
在上述例子中,area
函数接受一个 Shape
类型的参数,并根据 kind
属性的值来计算图形的面积。根据 kind
属性的不同,函数可以正确地处理圆形和正方形。
总结
交叉类型和联合类型是 TypeScript 中用于处理多个类型的机制。交叉类型使用 &
运算符将多个类型合并为一个类型,用于表示一个对象具有多个类型的属性。联合类型使用 |
运算符将多个类型组合为一个类型,用于表示一个值可以是多个类型中的其中一个。
交叉类型适用于组合多个类型的属性集合,常用于处理混合对象。联合类型适用于表示可能具有多种类型的值,常用于处理可变类型。
了解和熟练运用交叉类型和联合类型可以让我们更好地处理复杂的类型情况,提高代码的可读性和健壮性。
本文来自极简博客,作者:晨曦之光,转载请注明原文链接:TypeScript中的交叉类型与联合类型