联合类型和交叉类型

联合类型和交叉类型

在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 三个属性。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值