当前位置: 首页 > 科技观察

减少TS重复代码,Omit真的很好用!

时间:2023-03-20 19:37:04 科技观察

你用过TypeScript内置的Omit工具类型吗?想了解Omit的应用场景和内部实现吗?如果你愿意,看完这篇文章,或许你就会明白。这是一个User类型,使用type类型别名来描述User对象。输入User={id:string;//用户ID名称:字符串;//用户名密码:字符串;//密码创建时间:日期;//创建时间updatedAt:Date;//更新时间};其中id、createdAt和updatedAt这些属性是服务器在创建用户时自动生成的。因此,在注册用户时,用于描述注册用户对象的RegisterUser类型不需要上述属性。那么我们应该如何高效地定义RegisterUser类型呢?这时候我们可以使用TS自带的Omit工具类型。输入RegisterUser=Omit;typeRegisterUser={name:string;password:string;}从上面的结果我们可以看出id、createdAt和updatedAt属性都被过滤掉了,所以使用Omit工具类型,我们可以很方便的过滤掉对象类型中不需要的属性。事实上,Omit工具类型还有其他功能。例如,我们可以使用接口继承的方法来实现覆盖现有对象类型已知属性的类型。具体实现方法也很简单:interfaceUserUIextendsOmit{创建时间:字符串;updatedAt:string;}上面代码中,UserUI接口描述的对象是用来在页面上显示用户信息的,所以我们将原来User类型中的createdAt和updatedAt属性的类型改为string类型。了解了Omit工具类型的应用场景后,我们来看看它内部是如何实现的。//typescript/lib/lib.es5.d.tstypeOmit=Pick>;从上面代码可以看出,Omit工具类型内部使用了TS自带的Pick和Exclude工具类型。其中,keyof运算符用于获取某个类型的所有键,其返回类型为联合类型。Exclude工具类型用于实现类型过滤,即从keyofT返回的联合类型中过滤掉要排除的属性。最后使用Pick工具类型从原始对象类型中选择要保留的属性并将它们组合成新的对象类型。