在TypeScript中,联合类型和交叉类型是两种常用的类型定义方式。它们可以帮助我们更灵活地定义变量、函数参数、函数返回值等。
联合类型
联合类型(Union Types)表示一个变量可以是多个类型中的其中一个。使用|符号将多个类型进行连接。
例如,我们要定义一个变量,它可以是数字类型或者字符串类型:
let value: number | string;
value = 10; // 合法
value = "hello"; // 合法
value = true; // 非法,布尔类型不在联合类型中
联合类型在函数参数、函数返回值等场景中也非常有用。例如,我们要定义一个函数,参数可以是字符串或者数组:
function printData(data: string | string[]) {
if (Array.isArray(data)) {
for (let item of data) {
console.log(item);
}
} else {
console.log(data);
}
}
printData("hello"); // 输出: hello
printData(["apple", "banana", "orange"]); // 输出: apple, banana, orange
交叉类型
交叉类型(Intersection Types)表示一个变量可以同时拥有多个类型的特性。使用&符号将多个类型进行连接。
例如,我们要定义一个变量,它既是字符串类型,又是对象类型:
let person: string & { age: number };
person = "Jack"; // 合法
person = { age: 25 }; // 非法,缺少字符串类型的特性
person = "Jack" + 25; // 合法,字符串类型特性和对象类型特性的结合
交叉类型可以在扩展对象类型时非常有用。例如,我们要定义一个新的对象类型,它包含了原始对象类型的特性,又引入了额外的属性:
type Person = { name: string; age: number };
type Employee = Person & { id: number; position: string };
const employee: Employee = {
name: "Alice",
age: 30,
id: 123,
position: "Manager",
};
console.log(employee.name); // 输出: Alice
console.log(employee.age); // 输出: 30
console.log(employee.id); // 输出: 123
console.log(employee.position); // 输出: Manager
结语
联合类型和交叉类型是TypeScript中灵活且强大的类型定义方式。联合类型可以表示一个变量可以拥有多个类型中的一个,而交叉类型可以表示一个变量同时拥有多个类型的特性。合理运用这两种类型可以提高代码的灵活性和可读性。

评论 (0)