partial

  • 构造一个新类型,并将实际类型参数T的所有属性变为可选属性 ```typescript interface Foo { a: string, b: number }

type Built = Partial;

  1. <a name="qyXFe"></a>
  2. # Required<T>
  3. - 构造一个新类型,并将实际类型参数T的所有属性变为只读属性
  4. ```typescript
  5. interface Foo {
  6. a: string,
  7. b: number
  8. }
  9. type Built = Readonly<Foo>;

Record

  • 该工具类型能够使用给定的对象属性名类型和对象属性类型创建一个新的对象类型
  • 因为类型参数K是用作对象属性名类型的,所以实际类型参数K必须能够赋值给string | number | boolean类型 ```typescript type K = ‘x’ | ‘y’; type T = number; type R = Record;

/ { x: number, y: number } / const a: R = { x: 1, y: 1 };

  1. <a name="psO37"></a>
  2. # Pick<T, K>
  3. - 该工具类型能够从已有对象类型中选取给定的属性及其类型,然后构建出一个新的对象类型
  4. ```typescript
  5. interface Foo {
  6. x: number,
  7. y: number
  8. }
  9. type T = Pick<Foo, 'x'>; // { x: number }

Omit

  • 该工具类型能够从已有对象类型中剔除选取给定的属性及其类型,然后构建出一个新的对象类型 ```typescript interface Foo { x: number, y: number }

type T = Omit; // { y: number }

  1. <a name="8895G"></a>
  2. # Exclude<T, U>
  3. - 该工具类型能够从类型T中剔除所有可以赋值给类型U的类型,也就是说只会留下不可以赋值给类型U的类型
  4. ```typescript
  5. type T0 = Exclude<'a' | 'b' | 'c', 'a'>; // 'b' | 'c'

Extract

  • 该工具类型能够从类型T中获取所有可以赋值给类型U的类型,也就是说只会留下可以赋值给类型U的类型

    1. type T0 = Extract<'a' | 'b' | 'c', 'a'>; // 'a'

    NonNullable

  • 该工具类型能够从类型T中剔除null和undefined类型,并构建出一个新的类型,也就是获取类型T中的非空类型

    1. // string
    2. type T = NonNullable<string | undefined | null>;

    Parameters

  • 该工具类型能够获取函数类型T的参数类型并使用参数类型构建一个元组类型

    1. // [{ a: number, b: number }]
    2. type T = Parameters<(a: number, b: number) => void>;

    ConstructorParameters

  • 该工具类型能够获取构造函数类型T的参数类型,并使用参数类型构建一个元组类型

    1. // [{ a: number, b: number }]
    2. type T = ConstructorParameters<new (a: number, b: number) => void>;

    ReturnType

  • 该工具类型能够获取函数类型T的返回值类型 ```typescript // number type Foo = ReturnType<() => number>;

function f1(x: number) { return x }

// // number type Foo = ReturnType;

  1. <a name="Fxbjv"></a>
  2. # InstanceType<T>
  3. - 该工具类型能够获取构造函数类型T的返回值类型
  4. ```typescript
  5. // number
  6. type Foo = InstanceType<new () => number>;

ThisParameterType

  • 该工具类型能够获取函数类型T中this参数的类型,若函数没有定义this参数则返回unknown ```typescript function f1(this: object) { }

// object type F = ThisParameterType;

  1. <a name="OlHIW"></a>
  2. # OmitThisParameter<T>
  3. - 该工具类型能够获取函数类型T中剔除this参数类型,并构造一个新类型
  4. ```typescript
  5. function f1(this: object, x: number) {
  6. }
  7. // (x: number) => void
  8. type F = OmitThisParameter<typeof f1>

ThisType

  • 该工具类型比较特殊,它不是用于构造一个新类型,而是用于定义对象字面量方法中this的类型 ```typescript let obj: ThisType<{ x: number }> & { getX: () => number };

obj = { getX() { // { x: number, y: number } this; return this.x; } } ```