TypeScript 中的
Pick<T, K>也是一个工具类型(Utility Type)。它用于从类型T中选取一些属性,并创建一个新的类型。
1. 定义
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
}
实现原理:
- 首先通过
K extends keyof T约束K必须是T的属性键(key)的子集。 - 然后使用映射类型(Mapped Type)的语法,遍历
K中的每个属性P。 - 对于每个属性
P,创建一个新的属性,类型为T[P],即T中对应属性P的类型。
最后,就创建了一个新的类型,它包含了 T 中被 K 选取的属性。
2. 示例
(() => {
type Foo = {
a: string;
b: number;
c: boolean;
};
type MyPick<T, K extends keyof T> = {
[P in K]: T[P];
};
type A = MyPick<Foo, "a" | "b">; // {a: string, b: number}
type B = MyPick<Foo, "c">; // {c: boolean}
type C = MyPick<Foo, "d">; // Error
const a: A = {
a: "a",
b: 2,
};
const b: B = {
c: false,
};
})();
在这个例子中,A、B 是从 Foo 类型中选取相应属性创建的新类型。
使用 Pick 类型可以帮助你快速创建一个新的类型,它包含了原始类型中的部分属性。
这在需要从大型接口或类型中提取部分属性时非常有用。