高级类型
在 基础类型、接口与类型别名、泛型之上,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 : Textends右侧为待判定模式;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> | 去掉 null 与 undefined |
ReturnType<F> / Parameters<F> | 函数签名投影 |
具体行为以当前 TS 手册为准。
模板字面量类型
对字符串联合做模式组合,配合 `hello ${Name}` 等形式,常用于事件名、路由、CSS 变量等 DSL 类型安全。
与运行时
这些类型擦除后不存在于 JS;只在编译期保证一致性。复杂条件类型可降低类型打印与编译时间体验,宜分层抽别名。
相关链接
- 泛型(
infer、约束) - 类型推断与类型守卫(联合、
Exclude/Extract与窄化) - 接口与类型别名(交叉、索引签名)
- 基础类型(字面量、只读元组)
- tsconfig配置(
strict对函数类型的影响)