创见博客
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

总结

  1. Partial 可选
  2. Required 必填
  3. Readonly 只读
  4. Pick 挑选
  5. Omit 剔除
  6. Exclude 排除联合类型
  7. Extract 提取联合类型
  8. Record 定义对象
  9. ReturnType 函数返回值
  10. Parameters 函数参数
评论
0/100