题目解析
在TypeScript中,Pick是一个内置的类型实用工具,它允许从一个接口或类型中选择一组指定属性,并创建一个新的类型,仅包含这些被选中的属性。假设我们有一个复杂的接口,但只需要其中几个属性来创建一个新的类型,这时Pick就显得尤为有用。
示例分析
interface User{
id: number;
name: string;
email: string;
age: number;
}
如果我们只想从User接口中提取id和name属性来创建一个新的类型,我们可以这样做:
type PickedUser = Pick<User, 'id' | 'name'>
let user: PickedUser = {
id: 1,
name: "Alice"
}
这样,PickedUser就只包含了id和name两个属性。
题解
type MyPick<T, K extends keyof T> = {
[P in K]: T[P];
}
T代表原类型。K extends keyof T意味着K必须是T的属性名,确保我们只能选择实际存在的属性。[P in K]是映射类型的语法,遍历K中的每一属性名P。T[P]则获取T中每个属性P的类型。
知识点
- 映射类型:
TypeScript中的映射类型允许你根据现有的类型中的属性创建新的类型。上面的[P in K]: T[P]就是一个映射类型的应用实例。 - 泛型:
T和K是泛型参数,使得MyPick类型更加灵活,可以应用于任何类型和该类型的一组属性上。 - 索引类型查询操作符(keyof):
keyof T返回一个联合类型,包含了T的所有键名。通过K extends keyof T约束,确保了只能选择T中存在属性。 - 类型别名:
type MyPick定义了新的类型别名,使得复杂的类型逻辑可以被重用和命名。
我是菜逼,大佬勿喷!