1.可选泛型
将泛型中的所有属性变为可选.
1 | type Partial<T> = { |
举例:
1 | type Person = { |
再使用Partial包裹
1 | type PartOfPerson = Partial<Person>; |
2.将K类型的所有属性转换为T类型
1 | type Record<K extends keyof any, T> = { |
这里的K实际作为键值使用,所以仅可用number|string|symbol
类型
举例:
1 | const obj: Record<string, string | number> = { |
1 | interface CatInfo { |
3.从T类型中提取K的键值列出来组成新的类型
1 | type Pick<T, K extends keyof T> = { |
举例:定义一个人的类型
1 | type Person = { |
重新定义一个只有名字和年龄的类型
1 | type NewPerson = Pick<Person, 'name' | 'age'>; |
4.去除T类型和U类型中的交集,取剩余部分
type Exclude<T, U> = T extends U ? never : T;
举例:
1 | type T1 = Exclude<"a" | "b" | "c", "a" | "b">; // "c" |
5.去除T类型中包含的K键值对
type Omit = Pick<T, Exclude<keyof T, K>>
举例:
1 | type Person = { |
去除Person
类型中的height
和weight
属性
1 | type NewPerson = Omit<Person, 'height' | 'age'>; |
6.将类型T中的所有属性变为必选项
1 | type Required<T> = { |
举例:
1 | type Person = { |
将Person中的height和weight属性变为必选项目
1 | type AllPerson = Required<Person>; |
7.获取T类型对应的返回值类型
1 | type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any; |
#### 8.总结
| 工具|特征|
|-| :- | :-: | -: |
|Partial<T>
|将类型中全部属性变为可选的|
|Required<T>
|将类型T中的所有属性变为必选项|
|Record<K, T>
|将K类型的所有属性转换为T类型|
|Pick<T, K>
|从T类型中提取K的键值列出来组成新的类型|
|Exclude<T, U>
|去除T类型和U类型中的交集,取剩余部分|
|Omit<T, K>
|去除T类型中包含的K键值对|
|ReturnType<T>
|获取T类型(函数)对应的返回值类型|
|Readonly<T>
|将类型T中所有属性变为只读|
|Extract<T,K>
|取T类型和K类型的交集组成新的类型|
|NonNullable<T>
|去除T类型中的null和undefined类型