从一个对象复制到另一个对象 - 仅从其接口的公共属性中复制值
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 形式。
我有一个接口 (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 形式。