类型合并、抽出 
一、类型抽出:从现有类型中选择或排除属性 
1. Pick<T, K> - 选择指定属性 
typescript
type A = { name: string; age: number; address: string };
// 抽出 name 和 age
type SubsetA = Pick<A, "name" | "age">; 
// { name: string; age: number }1
2
3
4
5
2
3
4
5
2. Omit<T, K> - 排除指定属性 
typescript
type A = { name: string; age: number; address: string };
// 排除 name 和 address,保留 age
type SubsetB = Omit<A, "name" | "address">; 
// { age: number }1
2
3
4
5
2
3
4
5
二、类型合并:在现有类型上扩展新属性 
1. 交叉类型 & - 合并多个类型 
typescript
type A = { name: string; age: number };
// 添加 time 属性
type B = A & { time: Date }; 
// { name: string; age: number; time: Date }1
2
3
4
5
2
3
4
5
2. 接口继承 extends - 扩展接口 
typescript
interface A { name: string; age: number }
// 继承并新增属性
interface B extends A { time: Date } 
// { name: string; age: number; time: Date }1
2
3
4
5
2
3
4
5
三、完整示例 
typescript
// 类型抽出
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 }1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
四、如何选择? 
| 场景 | 工具 | 示例 | 
|---|---|---|
| 保留少量属性 | Pick<T, K> | `Pick<User, "id" | 
| 排除少量属性 | Omit<T, K> | Omit<User, "age"> | 
| 扩展新属性 | &或extends | User & { role: string } | 
掌握这些工具类型,可以灵活操作 TypeScript 的类型系统!