type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
/**
* 官方的答案在这句话里
* From T, pick a set of properties whose keys are in the union K
* 【从T中,选择一组位于联合K中的属性的键】,答案有点绕
*
* 其实,TS 是想告诉我们: [P in K ] 拿到的是一个普通字符Key 还是 T 中的 Key 取决于 K的上一步 的K是否是 K extends keyof T.
*/
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
type Omit2<T, K extends keyof T> = {
// TS 认为 Exclude<keyof T, K> 已经把解析成了一个联合类型,
// P in 仅仅是从一个普通的字符联合类型来迭代,key 已经 和T无关了, 自然获取到的是仅仅是一个字符串key了
[P in Exclude<keyof T, K>]: T[P];
}
不需纠结,记住老师的解释,就非常好了!