ts 中其实已经内置了很多常用类型,此处记录一下,不是太完整 🐶
假设我们已经声明了一个 interface
1 | interface Person { |
Partial
将所有参数变成可选
1 | type Partial<T> = { |
Required
将所有参数变成必选
1 | type Required<T> = { |
Readonly
将所有参数变成只读
1 | type Readonly<T> = { |
Pick
挑出一部分属性及声明重新生成一个新类型
1 | type Pick<T, K extends keyof T> = { |
Record
构造一个具有一组属性为 K,类型为 T 的类型
1 | type Record<K extends keyof any, T> = { |
Exclude
从 T 中排除那些可赋值给 U 的类型
1 | type Exclude<T, U> = T extends U ? never : T |
Extract
从 T 中提取那些可赋值给 U 的类型
1 | type Extract<T, U> = T extends U ? T : never |
Omit
用来忽略对象某些属性
1 | type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>> |
NonNullable
从 T 中排除 null 和 undefined
1 | type NonNullable<T> = T extends null | undefined ? never : T |
Parameters
获取函数的参数类型组成的元组类型
1 | type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never |
ReturnType
获取函数的返回类型
1 | type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any |