TypeScript中如何按键名和类型筛选两个接口的公共参数?
筛选对象类型中键名与类型均一致的属性
我们需要实现一个类型工具,从两个对象类型中筛选出键名同时存在于两个类型,且对应属性类型完全一致的属性。
示例输入
interface human { name: string, height: number, weight: number } interface robot { name: number, height: number, weight: number }
预期结果
interface commonHumanRobot { height: number, weight: number }
解决方案
基于@Acid Coder的答案,以下是实现代码:
type selectCommon<T extends object, B extends object> = { [key in keyof T as T[key] extends B[key & keyof B] ? B[key & keyof B] extends T[key] ? key : never : never]: T[key] }
该类型工具通过映射类型遍历第一个对象类型T的所有键,仅保留那些在B中也存在、且两者对应属性类型完全双向兼容的键,最终生成包含这些共同属性的新类型。
内容的提问来源于stack exchange,提问作者Андрей
相关产品推荐
相关产品推荐

