泛型工具
1. Partial
作用:生成一个新类型,该类型与 T 拥有相同的属性,但是所有属性皆为可选项。
1 | // 原理:使用keyof拿到所有的属性名,然后在使用in遍历,T[P]拿到相应的值 |
2. Required
作用:生成一个新类型,该类型与 T 拥有相同的属性,但是所有属性皆为必选项。
1 | // 原理:使用-?,将可选项的?去掉。与之对应的还有个+? |
3. Readonly
作用:生成一个新类型,该类型与 T 拥有相同的属性,但是所有属性皆为必选 + 只读。
readonly:只读,赋给对象属性,那么该属性就不可以被重新赋值。函数形参也是同理。
1 | type Readonly<T> = {readonly [P in keyof T]: T[P]}; |
4. Record
接收两个泛型参数:对象键、值的类型。
作用 :定义一个对象的 key 和 value 类型。
1 | type Record<K extends keyof any, T> = {[P in K]: T}; |
5. Pick
作用:生成一个新类型,继承 Foo 中 age、gender 属性。
1 | type Pick<T, K extends keyof T> = { [P in K]: T[P] }; |
6. Omit
作用:生成一个新类型,忽略对象的某些属性功能。
1 | type Omit<T, K> = Pick<T, Exclude<keyof T, K>>; |
7. Exclude
作用:继承T在U中没有的类型。
1 | type Exclude<T, U> = T extends U ? never : T; |
8. Extract
作用: 和 Exclude 相反,继承T在U中所有的类型。
1 | type Extract<T, U> = T extends U ? T : never; |
9. NonNullable
作用:从泛型 T 中排除掉 null 和 undefined。
1 | type NonNullable<T> = T extends null | undefined ? never : T; |
10. Parameters
作用:得到函数参数类型组成的元祖类型。
1 | type Parameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => any ? P : never; |
11. ConstructorParameters
作用:获得构造函数参数类型组成的元祖类型。
1 | type ConstructorParameters<T extends new (...args: any[]) => any> = T extends new (...args: infer P) => any ? P : never; |
12. ReturnType
作用:得到函数返回值的类型。
1 | type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any; |
13. InstanceType
作用:获得构造函数返回值的类型。
1 | type InstanceType<T extends new (...args: any[]) => any> = T extends new (...args: any[]) => infer R ? R : any; |
14. ThisParameterType
15. OmitThisParameter
16. ThisType
内在字符串操作类型
Uppercase<StringType>
作用:将字符串文字类型转换为大写。
1 | type Greeting = "Hello, world" |
Lowercase<StringType>
作用:将字符串文字类型转换为小写。
1 | type Greeting = "Hello, world" |
Capitalize<StringType>
作用:将字符串文字类型的第一个字符转换为大写。
1 | type LowercaseGreeting = "hello, world"; |
Uncapitalize<StringType>
作用:将字符串文字类型的第一个字符转换为小写。
1 | type UppercaseGreeting = "HELLO WORLD"; |
官方文档
https://www.typescriptlang.org/docs/handbook/utility-types.html#thistypetype