JHHK

欢迎来到我的个人网站
行者常至 为者常成

常见写法解读

目录

代码解释

一、代码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,得到剩下的键

行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.