Skip to content

Latest commit

 

History

History
68 lines (52 loc) · 1.77 KB

File metadata and controls

68 lines (52 loc) · 1.77 KB

类型合并、抽出

一、类型抽出:从现有类型中选择或排除属性

1. Pick<T, K> - 选择指定属性

type A = { name: string; age: number; address: string };

// 抽出 name 和 age
type SubsetA = Pick<A, "name" | "age">; 
// { name: string; age: number }

2. Omit<T, K> - 排除指定属性

type A = { name: string; age: number; address: string };

// 排除 name 和 address,保留 age
type SubsetB = Omit<A, "name" | "address">; 
// { age: number }

二、类型合并:在现有类型上扩展新属性

1. 交叉类型 & - 合并多个类型

type A = { name: string; age: number };

// 添加 time 属性
type B = A & { time: Date }; 
// { name: string; age: number; time: Date }

2. 接口继承 extends - 扩展接口

interface A { name: string; age: number }

// 继承并新增属性
interface B extends A { time: Date } 
// { name: string; age: number; time: Date }

三、完整示例

// 类型抽出
type User = { id: string; name: string; age: number };
type UserAge = Pick<User, "age">;            // { age: number }
type UserWithoutId = Omit<User, "id">;       // { name: string; age: number }

// 类型合并
type Timestamp = { createdAt: Date };
type UserWithTime = User & Timestamp;       
// { id: string; name: string; age: number; createdAt: Date }

四、如何选择?

场景 工具 示例
保留少量属性 Pick<T, K> `Pick<User, "id"
排除少量属性 Omit<T, K> Omit<User, "age">
扩展新属性 &extends User & { role: string }

掌握这些工具类型,可以灵活操作 TypeScript 的类型系统!