Pick<Type, Keys>
可从类型中选取一组属性键来构造类型。以下面的 User
类型为例:
type User = {
name: string;
age: number;
gender: string;
};
经 Pick<Type, Keys>
转换后得到:
type User = {
name: string;
age: number;
gender: string;
};
type PickUser = Pick<User, 'name' | 'age'>;
// `PickUser` 类型相对于 `User` 类型少了 `gender` 属性
const pickUser: PickUser = {
name: 'Olive',
age: 18,
};
转换后的 PickUser
类型与下面的类型是等价的:
type PickUser = {
name: string;
age: number;
};
那么,Pick<Type, Keys>
是如何转换类型的呢?我们通过它的类型定义来分析一下:
/**
* From T, pick a set of properties whose keys are in the union K
*/
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
结合上面的示例,Pick
类型定义中的泛型 T
就是我们刚才定义的类型 User
,后面的 K extends keyof T
则表示泛型 K
继承自联合类型 keyof T
,由此可以得出泛型 K
是一个联合类型。
通过关键字 in
来遍历联合类型 K
,将联合类型中的每个成员作为 key,通过方括号语法访问类型 T
中该成员对应的值,即 T[P]
。
以上就是 Pick<Type, Keys>
的用法和类型定义的解析,欢迎在下方留言交流。