如何从TypeScript子接口实例中仅获取父接口属性?
只保留父接口属性的解决方法
TypeScript的类型约束仅在编译阶段生效,运行时变量本质还是完整的JavaScript对象,所以直接赋值不会自动剔除多余属性。要拿到仅包含父接口A属性的对象,有几种实用做法:
- 手动提取指定属性:直接取出
A定义的属性生成新对象
interface A { a:string; } interface B extends A{ b:string; } const b:B = { a:'a', b:'b' } const a:A = { a: b.a }; console.log(a); // 输出 { a: 'a' }
- 封装通用提取函数:如果需要复用逻辑,可以写一个通用函数提取目标类型的属性
function pick<T>(obj: any, keys: (keyof T)[]): T { const result = {} as T; keys.forEach(key => { if (obj.hasOwnProperty(key)) { result[key] = obj[key]; } }); return result; } // 使用示例 const a:A = pick<A>(b, ['a']); console.log(a); // 输出 { a: 'a' }
- 解构赋值简化操作:用解构语法直接剥离不需要的属性
// 将不需要的b属性重命名为_避免冲突,剩余部分就是A的属性 const { b: _, ...a } = b; console.log(a); // 输出 { a: 'a' }
内容的提问来源于stack exchange,提问作者StykPohlavsson
相关产品推荐
相关产品推荐

