ts的常用工具类型及其实现
七崽爱吃小饼干2026/03/02阅读 1
TypeScript 最常用10个内置工具类型及其实现
1. Partial<T> —— 所有属性变可选
把对象里的所有属性变成可选。
ts
interface User { name: string; age: number }
type PartialUser = Partial<User>;
// { name?: string; age?: number }
代码实现
ts
type Partial<T> = {
[P in keyof T]?: T[P]
}
2. Required<T> —— 所有属性变必填
和 Partial 相反。
ts
type PartialUser = { name?: string }
type RequiredUser = Required<PartialUser>;
// { name: string }
代码实现
ts
type Required<T> = {
[P in keyof T]-?: T[P]
}
3. Readonly<T> —— 所有属性变只读
ts
type ReadonlyUser = Readonly<User>;
// { readonly name: string; readonly age: number }
代码实现
ts
type Readonly<T> = {
readonly [P in keyof T]: T[P]
}
4. Pick<T, K> —— 挑选几个属性
从对象里挑出需要的属性。
ts
type PickedUser = Pick<User, "name">;
// { name: string }
代码实现
ts
type Pick<T, K extends keyof T> = {
[P in K]: T[P]
}
5. Omit<T, K> —— 剔除几个属性
删掉不要的属性。
ts
type OmitUser = Omit<User, "age">;
// { name: string }
代码实现
ts
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>
6. Exclude<T, U> —— 从联合类型里排除
ts
type T = "a" | "b" | "c";
type U = "a";
type Result = Exclude<T, U>;
// "b" | "c"
代码实现
ts
type Exclude<T, U> = T extends U ? never : T
7. Extract<T, U> —— 从联合类型里提取
ts
type Result = Extract<"a" | "b" | "c", "a" | "b">;
// "a" | "b"
代码实现
ts
type Extract<T, U> = T extends U ? T : never
8. Record<K, T> —— 快速定义对象类型
定义 key 和 value 的类型,最常用!
ts
type Obj = Record<string, number>;
// { [key: string]: number }
代码实现
ts
type Record<K extends keyof any, T> = {
[P in K]: T
}
9. ReturnType<T> —— 获取函数返回值类型
ts
const fn = () => ({ name: "zs" });
type FnReturn = ReturnType<typeof fn>;
// { name: string }
代码实现
ts
type ReturnType<T extends (...args: any) => any> =
T extends (...args: any) => infer R ? R : any
10. Parameters<T> —— 获取函数参数类型
ts
type Fn = (a: number, b: string) => void;
type Params = Parameters<Fn>;
// [number, string]
代码实现
ts
type Parameters<T extends (...args: any) => any> =
T extends (...args: infer P) => any ? P : never
总结
- Partial 可选
- Required 必填
- Readonly 只读
- Pick 挑选
- Omit 剔除
- Exclude 排除联合类型
- Extract 提取联合类型
- Record 定义对象
- ReturnType 函数返回值
- Parameters 函数参数