泛型的内置工具类型

62 阅读1分钟

Partial 将一个类型的属性全部变为可选 定义:type Partial = { [P in keyof T]?: T[P]; };

Required 将一个类型的属性全部变为必选 定义:type Required = { [P in keyof T]-?: T[P]; };

Readonly 将一个类型的属性全部变为只读状态 定义:type Readonly = { readonly [P in keyof T]: T[P]; };

Record 构造一个字面量对象 Type 定义:type Record<K extends keyof any, T> = { [P in K]: T; };

Pick 从一个 Type 中选取一些属性来构造一个新的对象 Type 定义:type Pick<T, K extends keyof T> = { [P in K]: T[P]; };

Omit 从一个对象类型中删除一些属性来构造一个新的对象 Type 定义:type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

Exclude 排除一个联合类型中的某一些类型来构造一个新 Type 定义:type Exclude<T, U> = T extends U ? never : T;

Extract 提取出一个联合类型中的某一些类型来构造一个新 Type 定义:type Extract<T, U> = T extends U ? T : never;

NonNullable 从类型中排除 null 和 undefined 来构造一个新的 Type 定义:type NonNullable = T extends null | undefined ? never : T;

Parameters 从 [函数 Type] 的形参构造一个数组 Type 定义:type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;

ConstructorParameters 从定义的[构造函数]的形参构造数组 Type 定义:type ConstructorParameters<T extends abstract new (...args: any) => any> = T extends abstract new (...args: infer P) => any ? P : never;

ReturnType 用函数 Type 的返回值定义一个新的 Type 定义:type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

InstanceType 从一个构造函数的实例定义一个新的 Type 定义:type InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (...args: any) => infer R ? R : any;

ThisParameterType 提取函数 Type 的 this 参数生成一个新的 Type 定义:type ThisParameterType = T extends (this: infer U, ...args: any[]) => any ? U : unknown;

OmitThisParameter 忽略函数 Type 的 this 参数,生成一个新的函数 Type 定义:type OmitThisParameter = unknown extends ThisParameterType ? T : T extends (...args: infer A) => infer R ? (...args: A) => R : T;