TypeScript 中的泛型你真搞懂了吗?

本文探讨了TypeScript中的泛型,包括基础必备知识如联合类型、交叉类型和内置条件类型的介绍,以及泛型进阶内容,如如何利用Pick和Omit提取接口字段,以及接口的交集、差集和并集操作。通过具体案例分析,帮助读者深入理解泛型在集合视角下的应用,并提出了Overwrite泛型解决类型覆盖问题。
摘要由CSDN通过智能技术生成

点击上方 程序员成长指北,关注公众号

回复1,加入高级Node交流群

在学习ts源码的时候,发现很多泛型还是看不懂,于是想写一篇文章,总结一下常用的泛型。

基础必备知识

联合类型vs交叉类型

// 联合类型
interface Bird {
  name: string;
  fly(): void;
}
interface Person {
  name: string;
  talk(): void;
}
type BirdPerson = Bird | Person;
let p: BirdPerson = { name: "zfeng", fly() {} }; 
let p1: BirdPerson = { name: "zfeng", talk() {} };

联合类型使用 “|”表示或的关系, 满足其中的一个情况即可。

interface Bird {
  name: string;
  fly(): void;
}
interface Person {
  name: string;
  talk(): void;
}
type BirdPerson = Bird & Person;
let p: BirdPerson = { name: "zhufeng", fly() {}, talk() {} };

交叉类型使用“&”,表示与的关系,需要满足所有的情况。

内置条件类型

type Extract<T, U> = T extends U ? T : never;
type Exclude<T, U> = T extends U ? never : T;
type NonNullable<T> = T extends null | undefined ? never : T;

type N = NonNullable<string | number | null | undefined>;// 删除null和undifined;
type E = Exclude<string | number, string>; // 排除关系 输出 string;
type I = Extract<string | number, string>; // 包含关系 输出 number;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值