泛型工具及实现
Posted tonychen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泛型工具及实现相关的知识,希望对你有一定的参考价值。
可实现的泛型工具
Pick
定义
From T, pick a set of properties whose keys are in the union K
大意:从 T
中挑出一些属性集合 K
来组成新的类型,举个例子:
type Parent = {
name: string;
age: number;
}
// 现在 Child 就有了 age 这个属性
type Child = Pick<Parent, \'age\'>
源码
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
Exclude
定义
Exclude from T those types that are assignable to U
大意:从 T
中剔除一些属性,举个例子:
type GirlFriend = \'girl friend\'
type Parent = {
name: string;
age: number;
girlFriend: GirlFriend;
}
type Child = Exclude<keyof Parent, \'girlFriend\'>
⚠注意这里 Child
相当于 type Child = \'name\' | \'age\'
源码
type Exclude<T, U> = T extends U ? never : T;
Omit
定义
Construct a type with the properties of T except for those in type K.
Pick
和 Exclude
其实都是非常基础的工具泛型,很多时候你如果直接用 Pick
或者 Exclude
效果还不如直接写来得直接。而 Omit
就基于这两个基础之上做的一个更抽象的封装,它允许你从一个对象中剔除若干个属性,剩下的就是你需要的新类型。下面是一个例子:
type GirlFriend = \'girl friend\'
type Parent = {
name: string;
age: number;
girlFriend: GirlFriend;
}
type Child = Omit<Parent, \'girlFriend\'>
// 等价于
// type Child = {
// name: string;
// age: number;
// }
源码
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
Partial
定义
Make all properties in T optional
大意:令所有的 T
的属性都变成可选属性,举个例子
以上是关于泛型工具及实现的主要内容,如果未能解决你的问题,请参考以下文章