TypeScript中如何实现对象类型的差集表示?
TypeScript中如何实现对象类型的差集表示?
哈哈,这个需求我之前也碰到过!TypeScript里确实没有像你设想的\这种直接的类型差集运算符,但其实早就有现成的内置工具类型能完美解决这个问题啦!
首先直接给你对应场景的解决方案:你想要从类型中排除特定属性的话,用TypeScript内置的Omit工具类型就可以了。
比如你举的简单例子,要从{propA, propB}里排除propA得到仅包含propB的类型,写成这样就行:
foo(arg: Omit<{ propA: any; propB: any }, 'propA'>) { ... }
对应你真实场景里的需求,把SomeObject中排除thisOnePropertyYouMayNotGive,代码就是:
foo(arg: Omit<SomeObject, 'thisOnePropertyYouMayNotGive'>) { ... }
如果你好奇Omit的底层逻辑,其实它是用另外两个内置工具类型Pick和Exclude组合出来的,等价于:
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
简单拆解下这个逻辑:
Exclude<keyof T, K>:先从类型T的所有键名中,排除掉K指定的那些键Pick<T, ...>:再从原类型T中,挑选出剩下的键对应的属性,最终就得到了排除目标属性后的类型
另外补充个小技巧:Omit还支持一次性排除多个属性,只要把第二个参数改成键名的联合类型就行,比如Omit<SomeObject, 'prop1' | 'prop2'>,就能同时排除这两个属性。
内容来源于stack exchange
相关产品推荐
相关产品推荐

