推荐答案
Pick<T, K> 是 TypeScript 中的一个实用工具类型,用于从类型 T 中选取一组属性 K 来构造一个新的类型。K 是一个字符串字面量或字符串字面量的联合类型,表示要从 T 中选取的属性名。
示例
// www.javascriptcn.com code example
interface User {
name: string;
age: number;
email: string;
}
type UserNameAndEmail = Pick<User, 'name' | 'email'>;
// UserNameAndEmail 类型等价于:
// {
// name: string;
// email: string;
// }本题详细解读
实现原理
Pick<T, K> 的实现原理是通过映射类型(Mapped Types)来实现的。TypeScript 提供了内置的 Pick 类型,其定义如下:
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};K extends keyof T:表示K必须是T的键的子集。[P in K]:遍历K中的每一个键P。T[P]:获取T中键P对应的类型。
使用场景
Pick<T, K> 通常用于从一个复杂的类型中提取出部分属性,生成一个新的类型。这在处理大型接口或类型时非常有用,可以减少重复代码并提高代码的可维护性。
示例解析
interface User {
name: string;
age: number;
email: string;
}
type UserNameAndEmail = Pick<User, 'name' | 'email'>;在这个例子中,Pick<User, 'name' | 'email'> 从 User 类型中选取了 name 和 email 两个属性,生成了一个新的类型 UserNameAndEmail。这个新类型只包含 name 和 email 两个属性,类型分别为 string。