高级类型

基础类型接口与类型别名泛型之上,TypeScript 提供映射类型条件类型模板字面量类型等,用于从现有类型算出新类型(工具类型库的理论基础)。


keyof、查找类型、索引访问

type P = Person['name'] // 某键对应类型
type Keys = keyof Person

映射结合可批量可选、只读等。


映射类型 in

type Readonly<T> = { readonly [K in keyof T]: T[K] }
type Partial<T> = { [K in keyof T]?: T[K] }

修饰符 readonly? 可 Key Remapping(较新版本):as 子句重命名键。


条件类型

type Flatten<T> = T extends Array<infer U> ? U : T
  • extends 右侧为待判定模式;infer 引入类型变量,由编译器推断。
  • 分布式条件:裸类型参数上的条件会分到联合各成员再合并(设计 Exclude 等时的关键)。

常用内置工具类型(节选)

工具作用
Partial<T>全部可选
Required<T>全部必填
Readonly<T>全部只读
Pick<T, K>选取键
Omit<T, K>排除键
Record<K, T>键到值映射
Exclude<T, U>从联合 T 去掉可赋给 U 的成员
Extract<T, U>联合 T 中可赋给 U 的成员
NonNullable<T>去掉 nullundefined
ReturnType<F> / Parameters<F>函数签名投影

具体行为以当前 TS 手册为准。


模板字面量类型

对字符串联合做模式组合,配合 `hello ${Name}` 等形式,常用于事件名、路由、CSS 变量等 DSL 类型安全。


与运行时

这些类型擦除后不存在于 JS;只在编译期保证一致性。复杂条件类型可降低类型打印编译时间体验,宜分层抽别名。


相关链接