在 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
用来从联合类型中选择符合特定条件的类型成员。