Pick和Extract的區別示例

龙陌發表於2024-03-04

在 TypeScript 中,PickExtract 是兩種不同的型別操作工具。它們分別用於從一個已有的型別中選擇或提取部分屬性和從聯合型別中提取符合條件的型別。

Pick 型別

Pick<T, K> 用於從型別 T 中選取指定的鍵 K 所對應的屬性,建立一個新的型別。

示例:

interface Person {
  name: string;
  age: number;
  address: string;
}

// 使用 Pick 從 Person 中提取 name 和 age 屬性建立新的型別
type BasicInfo = Pick<Person, 'name' | 'age'>;

const person: BasicInfo = {
  name: 'Alice',
  age: 30,
};

// 不允許包含未在 Pick 中宣告的屬性(如 address)
// person.address = '123 Main St.'; // 這行程式碼會報錯,因為 address 在 BasicInfo 中不存在

Extract 型別

Extract<T, U> 用於從聯合型別 T 中提取出與型別 U 相匹配的部分,形成一個新的聯合型別。

示例:

type Color = 'red' | 'green' | 'blue' | 'yellow';
type PrimaryColors = 'red' | 'blue';

// 使用 Extract 提取 Color 聯合型別中屬於 PrimaryColors 的顏色
type PrimaryColorType = Extract<Color, PrimaryColors>;

let color: PrimaryColorType = 'red'; // 正確
color = 'green'; // 錯誤,'green' 不是 PrimaryColors 中的成員

總結來說:

  • Pick 用來從物件型別中選擇子集屬性。
  • Extract 用來從聯合型別中選擇符合特定條件的型別成員。