目录
代码解释
一、代码1
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
我们先定义一个类型 User 以方便后续解释代码
type User = { id: number; name: string; age: number; }
1、keyof T
拿到类型 T 的所有键,例如:
keyof User // "id" | "name" | "age"
keyof User 不是一个单独的字面量类型,但它的结果是由若干个字面量类型组成的联合类型。
keyof any 表示:任何对象类型的 key,也就是说这个写法使 K 更通用,但都必须是 string | number | symbol。
在 JavaScript/TypeScript 中,对象的键(属性名)只能是 string、number、symbol 三种类型之一
2、K extends keyof any
限制泛型 K 必须是合法的键类型。
K 必须是 keyof T 的子类型,即 K 可以是 “id” | “name” | “age”,也可以是 “id” 或 “name” 等。
3、Exclude<keyof T, K>
Exclude<A, B> 从 A 中排除属于 B 的成员
Exclude<keyof T, K> 从 T 的键中排除 K,得到剩下的键
// 现在排除掉 "id"
type Result = Exclude<keyof User, "id">;
// => "name" | "age"
4、总结
表达式 | 说明 |
---|---|
keyof T |
提取类型 T 的所有键,得到一个联合类型 |
Exclude<A, B> |
从 A 中排除属于 B 的成员 |
Exclude<keyof T, K> |
从 T 的键中排除 K ,得到剩下的键 |
行者常至,为者常成!