联合类型和交叉类型

联合类型和交叉类型

在TypeScript中,除了基本的类型(如 numberstringboolean 等),我们还可以使用更加高级的类型来描述复杂的数据结构。其中,联合类型和交叉类型就是两个非常有用的高级类型。

联合类型(Union Types)

联合类型允许一个变量可以是多种类型中的任意一种。我们可以使用管道符 | 来表示联合类型。例如:

let myVariable: string | number;
myVariable = "hello"; // 这是可以的
myVariable = 42; // 这也是可以的

在上面的例子中,myVariable 可以是 string 类型,也可以是 number 类型。这在处理不确定类型的数据时非常有用。

联合类型的一个常见应用是处理 API 返回的数据:

interface SuccessResponse {
  status: 'success';
  data: any;
}

interface ErrorResponse {
  status: 'error';
  message: string;
}

type APIResponse = SuccessResponse | ErrorResponse;

function handleAPIResponse(response: APIResponse) {
  if (response.status === 'success') {
    console.log('Success:', response.data);
  } else {
    console.error('Error:', response.message);
  }
}

在这个例子中,我们定义了 SuccessResponseErrorResponse 两个接口,然后使用联合类型 APIResponse 来描述 API 可能返回的两种响应。在 handleAPIResponse 函数中,我们根据 status 字段来处理不同类型的响应。

交叉类型(Intersection Types)

交叉类型允许我们将多个类型合并成一个新的类型。我们可以使用与号 & 来表示交叉类型。例如:

interface Person {
  name: string;
  age: number;
}

interface Employee {
  job: string;
  salary: number;
}

type PersonEmployee = Person & Employee;

let myPersonEmployee: PersonEmployee = {
  name: 'John',
  age: 30,
  job: 'Software Engineer',
  salary: 80000
};

在上面的例子中,我们定义了 PersonEmployee 两个接口,然后使用交叉类型 PersonEmployee 来表示一个既是 Person 又是 Employee 的对象。

交叉类型在创建复杂的数据结构时非常有用,比如:

type NamedPoint = { name: string } & { x: number, y: number };

let myNamedPoint: NamedPoint = {
  name: 'Origin',
  x: 0,
  y: 0
};

在这个例子中,NamedPoint 类型同时包含了 namexy 三个属性。

相关推荐

  1. 联合类型交叉类型

    2024-06-18 18:16:03       31 阅读
  2. 【TS】如何使用联合类型交叉类型

    2024-06-18 18:16:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 18:16:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 18:16:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 18:16:03       82 阅读
  4. Python语言-面向对象

    2024-06-18 18:16:03       91 阅读

热门阅读

  1. 每天一个项目管理概念之干系人

    2024-06-18 18:16:03       30 阅读
  2. linux常用指令

    2024-06-18 18:16:03       26 阅读
  3. 2024大数据面试题汇总(更新中。。。)

    2024-06-18 18:16:03       24 阅读
  4. mysql中社区版如何杀死锁

    2024-06-18 18:16:03       24 阅读
  5. TypeScript中的枚举

    2024-06-18 18:16:03       29 阅读
  6. Python网络安全项目开发实战,如何看清Web攻击

    2024-06-18 18:16:03       29 阅读
  7. Ubuntu 22.04 一键安装 Oracle 11GR2 单机

    2024-06-18 18:16:03       26 阅读
  8. Spring Boot框架的原理及应用详解(一)

    2024-06-18 18:16:03       23 阅读
  9. 事件传播机制 与 责任链模式

    2024-06-18 18:16:03       26 阅读
  10. 有哪些技术可代替docker?

    2024-06-18 18:16:03       29 阅读
  11. 鸿蒙开发 一 (四)、ArkTS开发 --UI篇

    2024-06-18 18:16:03       32 阅读
  12. Collections.sort()方法总结

    2024-06-18 18:16:03       28 阅读