TypeScript 类型体操技巧

掌握 TypeScript 高级类型技巧,写出更健壮的代码。

TypeScript 的类型系统非常强大。掌握一些高级技巧可以让代码更加健壮。

条件类型

type IsArray<T> = T extends any[] ? true : false;

type A = IsArray<string[]>;  // true
type B = IsArray<string>;     // false

映射类型

type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};

type Optional<T> = {
  [P in keyof T]?: T[P];
};

模板字面量类型

type EventName<T extends string> = `on${Capitalize<T>}`;

type ClickEvent = EventName<'click'>;  // 'onClick'

分布式条件类型

type ToArray<T> = T extends any ? T[] : never;

type A = ToArray<string | number>;  // string[] | number[]

这些技巧在写库和类型安全的 API 时特别有用。