从一个对象复制到另一个对象 - 仅从其接口的公共属性中复制值

Copy from one object to another - only values from common properties of their interfaces

我有一个接口 (interfaceA) 有 2 个属性,另一个接口 (interfaceB) 有 3 个属性 (数字只是为了举例).

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

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

我的问题有解决办法吗?

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

这是否解决了您的问题?

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

PS:如果不是,则不可能,您需要了解对象 A 在运行时具有哪些键的信息——据我所知,无法从类型中生成该信息.您可以获得代表您想要的类型,例如Extract<keyof interfaceB, keyof interfaceA> 但无法将其转换为 runtime-usable 形式。