Typescript中如何运用Pick<T, K>?

83 阅读1分钟

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,
  };
})();

在这个例子中,AB 是从 Foo 类型中选取相应属性创建的新类型。

使用 Pick 类型可以帮助你快速创建一个新的类型,它包含了原始类型中的部分属性。

这在需要从大型接口或类型中提取部分属性时非常有用。