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> 的用法和类型定义的解析,欢迎在下方留言交流。

Playground Link

Last modification:August 15, 2024
如果觉得我的文章对你有用,请随意赞赏