内置工具类型
type 属性 源码解析
Exclude
- 排除(处理联合类型)
type Exclude<T, U> = T extends U ? never : T;
Extract
- 提取
type Extract<T, U> = T extends U ? T : never;
Omit
- 排除(处理对象类型)
type Omit<T, K extends keyof any> = { [P in Exclude<keyof T, K>]: T[P] };
Pick
- 提取 K
type Pick<T, K extends keyof T> = { [P in K]: T[P] };
Record
- 映射
type Record<K extends any, T> = { [P in K]: T };
Partial
- 属性变为可选值
type Partial<T> = { [P in keyof T]?: T[P] };
Required
- 属性变为必填项
type Required<T> = { [P in keyof T]-?: T[P] };
Readonly
- 只读
type Readonly<T> = { readonly [P in keyof T]: T[P] };
NonNullable
- 去掉 T 中的 null 和 undefined
type NonNullable<T> = T extends null | undefined ? never : T;
type NonNullable<T> = T & {};
Awaited
- 作用是获取 async/await 函数或 promise 的 then() 方法的返回值的类型。而且自带递归效果
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;
Parameters
- 作用是获取函数所有参数的类型集合,返回的是元组。T 自然就是函数了
type Parameters<T extends (...args: any) => any> = T extends (
...args: infer P
) => any
? P
: never;
ReturnType
- 作用是获取函数返回值的类型。T 为函数
type ReturnType<T extends (...args: any) => any> = T extends (
...args: any
) => infer R
? R
: any;
ConstructorParameters/InstanceType
- 我们知道 Parameters 和 ReturnType 这一对是获取普通/箭头函数的参数类型集合以及返回值类型的了,还有一对组合 ConstructorParameters 和 InstanceType 是获取构造函数的参数类型集合以及返回值类型的,和上面的比较类似我就放到一起了
Uppercase/Lowercase
- 这俩儿的作用是转换全部字母大小写
Capitalize/Uncapitalize
- 这俩儿的作用是转换首字母大小写