在 TypeScript 中,Pick
和 Extract
是兩種不同的型別操作工具。它們分別用於從一個已有的型別中選擇或提取部分屬性和從聯合型別中提取符合條件的型別。
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
用來從聯合型別中選擇符合特定條件的型別成員。