工具类型与映射类型
标准库提供一批基于映射类型的工具;自己写映射类型则能定制「遍历键并变换」。
常用内置工具
interface User {
id: number;
name: string;
email: string;
}
type PartialUser = Partial<User>; // 全可选
type IdName = Pick<User, "id" | "name">;
type WithoutEmail = Omit<User, "email">;
type RoleMap = Record<"admin" | "user", boolean>;
| 工具 | 作用 |
|---|---|
Partial<T> | 属性变可选 |
Required<T> | 属性变必选 |
Readonly<T> | 属性变只读 |
Pick / Omit | 取子集 / 去掉键 |
Record<K, V> | 键值映射对象类型 |
映射类型
type ReadonlyDeepish<T> = {
readonly [K in keyof T]: T[K];
};
keyof T 取出键的联合;in 遍历键。
键重映射(TS 4.1+)
type Getters<T> = {
[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K];
};
as 子句可过滤键(映射到 never)或改名。
要点
- 先查是否已有内置工具类型
- 映射类型 = 遍历
keyof生成新形状 - 键重映射用于改名 / 过滤
- 别为业务 DTO 过度「类型体操」