TS学习笔记:Omit减少重复的类型定义

恰巧在B站刷短视频,看到了这个教程。想了想还是蛮有用的,记录一下

假设现在要从服务器获取用户信息,需要定义一个 User 类型,也许会这样来进行处理:


这里面的 id、createAt 和 updateAt 都是创建用户时由服务端产生的。

因此,在注册用户时不需要前端传递这些属性,而只需要传 name 和 password 即可:


那么问题来了,要怎么高效复用已定义好的 User 类型,来产生一个 RegisterUser 呢?

Omit

为了解决前面场景里提到的问题,可以使用TypeScript 内置的工具类型 Omit,具体用法如:


可以看到 id、createAt 和 updateAt 几个属性已经被过滤掉。

所以,使用 Omit 工具类型,可以很方便地过滤掉对象类型中不需要的属性。

需要注意的是这里传入需要过滤的属性是联合类型(当然也可以传单个字符串字面量类型)

内部实现:

首先 Omit 是一个泛型,接收了 T 和 K 两个类型参数
K extends 这里,使用了泛型约束
keyof 可以获取到对象类型的 key 组成的联合类型,keyof any 返回的也是联合类型 string | number | symbol
接着看到使用了 Pick 和 Exclude 两个内置工具类型
Exclude 工具类型为 type Exclude<T, U> = T extends U ? never : T,可以从 keyof User 返回的联合类型中过滤掉要排除的属性,返回的是联合类型
Pick 工具类型 type Pick<T, K extends keyof T> = { [P in K]: T[P]; },可以从 User 对象类型中取出需要保留的属性,形成新的对象类型 

Omit 和 Pick 两个工具类型的效果是互补的: 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值