← 返回文章列表

TypeScript 高级类型模式

TypeScript 的类型系统是图灵完备的,掌握高级类型模式可以让我们写出更安全、更具表达力的代码。

条件类型

条件类型允许我们根据类型关系来选择类型:

type IsString<T> = T extends string ? true : false;

映射类型

映射类型可以基于已有类型创建新类型:

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

模板字面量类型

TypeScript 4.1 引入的模板字面量类型让字符串操作也能获得类型安全:

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

递归类型

递归类型可以处理嵌套数据结构:

type DeepPartial<T> = {
  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};

实践建议

  • 不要为了炫技而过度使用复杂类型
  • 优先使用简单直观的类型定义
  • 复杂类型加上注释说明用途
  • 善用类型工具库如 type-fest