05 交叉类型与联合类型的高级用法

交叉类型与联合类型的高级用法 #

交叉类型(Intersection Types)和联合类型(Union Types)在 TypeScript 中的高级应用可以处理更复杂的类型场景。

基本概念回顾 #

  • 联合类型:表示一个值可以是几种类型之一,使用 | 分隔。
  • 交叉类型:表示一个值同时满足多个类型,使用 & 组合。

高级使用场景 #

  • 在泛型中结合使用,实现类型约束。
  • 与条件类型结合,进行类型分发。
  • 处理可辨识联合类型(Discriminated Unions)。

示例代码 #

// 高级联合类型
type StringOrNumber = string | number;

function identity<T extends StringOrNumber>(arg: T): T {
  return arg;
}

// 高级交叉类型
interface A { a: string; }
interface B { b: number; }
type C = A & B; // { a: string; b: number; }

// 可辨识联合类型
type Shape =
  | { kind: 'circle'; radius: number }
  | { kind: 'square'; side: number };

function getArea(shape: Shape) {
  switch (shape.kind) {
    case 'circle': return Math.PI * shape.radius ** 2;
    case 'square': return shape.side ** 2;
  }
}

最佳实践 #

  • 使用联合类型时,结合类型守卫缩小范围。
  • 交叉类型适合扩展现有类型,但避免过度嵌套导致复杂性。
  • 在 API 设计中,利用可辨识联合类型提升类型安全性。