首页 > 解决方案 > 从一个对象复制到另一个对象 - 仅来自其接口的公共属性的值

问题描述

我有一个interfaceA具有 2 个属性的接口 ( ) 和另一个interfaceB具有 3 个属性的 ( ) (数字只是示例)。

我已经创建了一个对象(类型:)interfaceB,我想创建另一个对象(类型:)interfaceA,并且只将公共属性中的值从 B 复制到 A。

在这两种解决方案中,如果有人向其中一个接口添加属性,我也必须在分配中添加或删除该属性。

我的问题有什么解决办法吗?

我创建了一个StackBlitz来帮助您更好地理解。

标签: typescriptclean-architecture

解决方案


这能解决你的问题吗?

function copyValues(objA: interfaceA, objB: interfaceB) {
  Object.entries(objB).forEach(([key, value]) => {
    if (objA.hasOwnProperty(key)) {
      objA[key] = value;
    }
  });
}

PS:如果没有,则不可能,您需要知道 objectA 在运行时具有哪些键的信息-AFAIK 无法从类型中生成该键。例如,您可以获得表示您想要的类型的类型,Extract<keyof interfaceB, keyof interfaceA>但无法将其转换为运行时可用的形式。


推荐阅读