泛型工具及实现

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.

PickExclude 其实都是非常基础的工具泛型,很多时候你如果直接用 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 的属性都变成可选属性,举个例子

以上是关于泛型工具及实现的主要内容,如果未能解决你的问题,请参考以下文章

使用泛型实现工具类功能

这个嵌套类构造函数片段可以应用于泛型类吗?

Java泛型:类型擦除

JPA的泛型DAO设计及使用

跟王老师学泛型:定义泛型接口及实现

操作 Java 泛型:泛型在继承方面体现与通配符使用