TypeScript 工具类型(Utility Types) 是官方内置的一组泛型类型,用来在类型系统里做“类型变换”。它们通常基于泛型、映射类型、条件类型来封装常见的类型操作。
我给你整理一个比较系统的清单,分为常用、对象操作、集合操作和特殊工具几类:
🌟 常用工具类型
工具类型 | 说明 | 示例 |
---|
Partial<T> | 将 T 的所有属性变为可选 | {a: number, b: string} → {a?: number, b?: string} |
Required<T> | 将 T 的所有属性变为必填 | {a?: number} → {a: number} |
Readonly<T> | 将 T 的所有属性设为只读 | {a: number} → {readonly a: number} |
Record<K,T> | 构造一个以联合类型 K 为键、T 为值的对象类型 | `Record<'a' |
Pick<T,K> | 从类型 T 中挑选属性 K | `Pick<User, 'id' |
Omit<T,K> | 从类型 T 中剔除属性 K | Omit<User, 'password'> |
🔑 对象属性相关
工具类型 | 说明 | 示例 |
---|
Extract<T,U> | 提取 T 中可赋值给 U 的部分 | `Extract<'a' |
Exclude<T,U> | 从 T 中剔除可赋值给 U 的部分 | `Exclude<'a' |
NonNullable<T> | 去掉 null 和 undefined | NonNullable<string | null> → string |
📚 函数相关
工具类型 | 说明 | 示例 |
---|
Parameters<T> | 获取函数参数类型的元组 | (a: string, b: number) => void → [string, number] |
ReturnType<T> | 获取函数返回值类型 | () => Promise<number> → Promise<number> |
ConstructorParameters<T> | 获取构造函数参数类型 | new (s: string) => Person → [string] |
InstanceType<T> | 获取构造函数实例类型 | InstanceType<typeof Person> → Person |
🛠️ 其他特殊工具
工具类型 | 说明 | 示例 |
---|
ThisParameterType<T> | 提取函数 this 的类型 | (this: Person, name: string) => void → Person |
OmitThisParameter<T> | 去掉函数的 this 参数 | (this: Person, name: string) => void → (name: string) => void |
ThisType<T> | 在对象字面量里指定 this 的类型(配合 --noImplicitThis ) | { a: string, b(): void } |
Awaited<T> | 获取 Promise 的值类型(TS 4.5 新增) | Awaited<Promise<string>> → string |
🔍 示例演示
interface User {id: number;name: string;age?: number;
}// Partial
type UserPartial = Partial<User>;
// { id?: number; name?: string; age?: number; }// Omit
type UserWithoutAge = Omit<User, 'age'>;
// { id: number; name: string; }// Parameters
function greet(name: string, age: number) {}
type GreetParams = Parameters<typeof greet>;
// [string, number]// ReturnType
type GreetReturn = ReturnType<typeof greet>;
// void