Partial

作用:生成一个新类型,该类型与 T 拥有相同的属性,但是所有属性皆为可选项

源码

  1. type Partial<T> = {
  2. [P in kefof T]?: T[P]
  3. }

eg

  1. interface Foo {
  2. name: string
  3. age: number
  4. }
  5. type Bar = Partial<Foo>
  6. // 相当于
  7. type Bar = {
  8. name?: string
  9. age?: string
  10. }

Record

Required

作用:生成一个新类型,该类型与 T 拥有相同的属性,但是所有属性皆为必选项

源码

  1. type Require<T> = {
  2. [p in keyof T]-?: T[P]
  3. }

eg

  1. interface Foo {
  2. name: string
  3. age?: number
  4. }
  5. type Bar = Required<Foo>
  6. // 相当于
  7. type Bar = {
  8. name: string
  9. age: string
  10. }

Readonly

作用:生成一个新类型,该类型与 T 拥有相同的属性,但是所有属性皆为必选项

源码

  1. type Require<T> = {
  2. [p in keyof T]-?: T[P]
  3. }

eg

  1. interface Foo {
  2. name: string
  3. age: number
  4. }
  5. type Bar = Required<Foo>
  6. // 相当于
  7. type Bar = {
  8. readonly name: string
  9. readonly age: string
  10. }

Pick

作用:生成一个新类型,该类型拥有 T 中的 K 属性

源码

  1. type Pick<T, K extends keyof T> = {
  2. [p in K]: T[K]
  3. }

eg

  1. interface Foo {
  2. name: string
  3. age?: number
  4. gender: string
  5. }
  6. type Bar = Pick<Foo, 'age' | 'gender'>
  7. // 相当于
  8. type Bar = {
  9. age?: string
  10. gender: string
  11. }

Exclude

作用:如果 T 是 U 的子类型则返回 never 不是则返回 T

源码

  1. type Exclude<T, U> = T extends U ? never : T

eg

  1. type A = number | string | boolean
  2. type B = number | boolean
  3. type Foo = Exclude<A, B>
  4. // 相当于
  5. type Foo = string

Extract

作用: 和 Exclude 相反
源码

  1. type Extract<T, U> = T extends U ? T : never

eg

  1. type A = number | string | boolean
  2. type B = number | boolean
  3. type Foo = Exclude<A, B>
  4. // 相当于
  5. type Foo = number | boolean

Omit

作用:生成一个新类型,该类型拥有 T 中除了 K 属性以外的所有属性
源码

  1. type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>

eg

  1. type Foo = {
  2. name: string
  3. age: number
  4. }
  5. type Bar = Omit<Foo, 'age'>
  6. // 相当于
  7. type Bar = {
  8. name: string
  9. }