TypeScript中的联合类型与交叉类型

D
dashen24 2024-10-07T09:02:15+08:00
0 0 259

在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)