内置高级类型
Parameters
用来提取函数参数的类型
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : any;
ReturnType
用来提取函数的返回值类型
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
ConstructorParameters
用来提取构造器的参数类型
type ConstructorParameters<T extends abstract new (...args: any) => any> = T extends abstract new (...args: infer P) => any ? P : never;
InstanceType
用来提取构造器的返回值类型
type InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (...args: any) => infer R ? R : any;
Partial
用来把索引类型变成可选类型
type Partial<T> = {
[P in keyof T]?: T[P];
};
Required
用来将可选索引类型变成必选类型,也就是Required类型
type Required<T> = {
[P in keyof T]-?: T[P];
};
Readonly
用来将索引类型变成只读类型
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
Pick
用来对索引进行修改和过滤
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
Record
用来创建索引类型
type Record<K extends keyof any, T> = {
[P in K]: T;
};
Exclude
用来删除联合类型的一部分
type Exclude<T, U> = T extends U ? never : T;
Extract
用来保留联合类型的一部分
type Extract<T, U> = T extends U ? T : never;
Omit
用来保留索引,也就是和Pick反过来
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
Awaited
用来获取Promise的ValueType的类型
type Awaited<T> =
T extends null | undefined
? T
: T extends object & { then(onfulfilled: infer F): any }
? F extends ((value: infer V, ...args: any) => any)
? Awaited<V>
: never
: T;
NonNullable
用来判断是否为非空类型
type NonNullable<T> = T extends null | undefined ? never : T;
ThisParameterType
用来约束this
type ThisParameterType<T> =
T extends (this: infer U, ...args: any[]) => any
? U
: unknown;
OmitThisParameter
用来提取this
type OmitThisParameter<T> =
unknown extends ThisParameterType<T>
? T
: T extends (...args: infer A) => infer R
? (...args: A) => R
: T;