交叉类型与联合类型的高级用法 #
交叉类型(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 设计中,利用可辨识联合类型提升类型安全性。