我有两个接口:
public interface ObjectOne {
field1: string;
field2: string;
field3: string;
field4: string;
field5: string;
...
}
public interface ObjectTwo {
field2: string;
field5: string;
field8: string;
...
}
让我们想象一下
ObjectOne
有 20 个字段,ObjectTwo
有 10 个字段(都是 ObjectOne
的一部分)。
在操作的最后,我想将
ObjectOne
的字段分配给 ObjectTwo
(或复制它们),避免将每个字段映射为:
objTwo.field2 = objOne.field2;
objTwo.field5 = objOne.field5;
objTwo.field8 = objOne.field8;
...
我知道我可以将
ObjectOne
解构为:
const {field2, field5, field8, fieldX, ...} = objOne;
然后将所有这些字段分配给
objTwo
,如下所示:
objTwo = {field5, field8, fieldX, ...};
但我希望这里存在一个更好的解决方案(作为
spread operator
的逆)。扩展运算符示例:
const objOne = {...objTwo, field1, field3, field4, field6, ...};
如果我对 objTwo 使用扩展运算符,这将继承所有 objOne 字段,即使我声明了对象类型。
您可以使用展开运算符,您可以像我的示例中那样使用不需要的运算符
one
。这是一个例子。
const copyFrom = { one: 'one', two: 'two', three: 'three' }
const { one, ...rest } = copyFrom
const copyTo = { ...rest } // or just copyTo = rest
Object.keys(ObjectTwo).forEach(key=>ObjectTwo[key]=ObjectOne[key]);
我能得到的最接近你需要的是这个
one = {
field1: "field1",
field2: "field2",
field3: "field3",
field4: "field4",
field5: "field5"
};
two = {
field2: "field2x",
field5: "field5x",
field8: "field8x"
};
Object.keys(two).forEach(function(x) { if (typeof one[x] !== "undefined") two[x] = one[x];});
// two is now:
// {field2: "field2", field5: "field5", field8: "field8x"}
这并不理想,但它只会将定义的值从一个对象复制到另一个对象