TypeScript 类型系统抽象主视觉
ADVANCED TYPESCRIPT · PLAZA BATCH 027

类型体操
进阶

把类型系统写成一门可推导的语言。穿过约束、分发与递归,建立更可靠的 API 设计直觉。

从“会写类型”到“能设计类型”
01 / 核心视角

类型不是装饰,
而是编译期的计算。

类型体操的价值不在于制造晦涩的单行代码,而在于把数据结构、边界条件与开发者体验提前表达出来。进阶的关键,是理解每个类型运算的输入、分支和收敛方式。

“先画出类型变换的形状,再决定语法。”
—— 一条适用于复杂泛型的工程原则
02 / 五个支点
01
Conditional

条件类型

用 extends 描述分支,让类型根据输入形状自动选择结果。

02
Inference

infer 提取

从函数、数组、Promise 与模板结构中捕获局部类型变量。

03
Mapped

映射类型

批量重塑属性的可选性、只读性与键集合,构建可复用工具类型。

04
Template

模板字面量

让字符串字面量参与计算,生成事件名、路径与命名约束。

05
Recursive

递归与终止

处理嵌套结构时,明确 base case,控制实例化深度与编译成本。

06
DX

工程边界

优先可读性与错误提示,避免为了“类型正确”牺牲团队维护效率。

03 / 一眼看懂
type DeepReadonly<T> =
  T extends (...args: any[]) => any ? T :
  T extends readonly any[] ? { readonly [K in keyof T]: DeepReadonly<T[K]> } :
  T extends object ? { readonly [K in keyof T]: DeepReadonly<T[K]> } : T;
04 / 学习路线
STEP 01掌握分发条件类型
先理解联合类型如何拆分。
STEP 02练习 infer 与重建
从已有结构提取信息。
STEP 03进入递归工具类型
为每个递归设计出口。
STEP 04回到真实 API
以错误提示与可维护性验收。