假设我有一个现有的对象
我有另一个对象,例如
现在,我只想有选择地复制
现在,假设我想复制属性
如何编写此方法?请注意,我也不想将属性列表提供为字符串,因为我希望尽可能在编译时进行安全检查。
因此,基本要求如下:
1. 从对象中仅复制几个属性值 2. 复制到现有对象中,而不是创建一个新对象 3. 保留目标对象的其他属性值 4. 避免使用属性名称字符串(例如 'b','d'),并尽可能利用TypeScript类型安全性
注:当我在(伪)代码示例中提到 obj2.b 等内容时: 我不是指字面上的 obj2.b。 而是某种检查编译时检查 b 是否实际上是 obj2 类型的属性的方式。
obj1 = {a:'A',b:'B',c:'C',d:'D'}
。我有另一个对象,例如
obj2 = {b:'B2',c:'C2',d:'D2',e:'E2'}
。现在,我只想有选择地复制
obj2
中只有少数属性的值到obj1
,对于obj1
中其余的属性,我想让它们保持不变。现在,假设我想复制属性
b
和d
的值。我希望执行以下操作:obj1 = {a: 'A', b: 'B', c: 'C', d: 'D'};
obj2 = {b: 'B2', c: 'C2', d: 'D2', e: 'E2'};
copyPropertyvalues(
obj2, // source
obj1, // destination
[obj2.b, obj2.d] // properties to copy >> see clarification below
); // should result in obj1 = {a: 'A', b: 'B2', c: 'C', d: 'D2'}
如何编写此方法?请注意,我也不想将属性列表提供为字符串,因为我希望尽可能在编译时进行安全检查。
因此,基本要求如下:
1. 从对象中仅复制几个属性值 2. 复制到现有对象中,而不是创建一个新对象 3. 保留目标对象的其他属性值 4. 避免使用属性名称字符串(例如 'b','d'),并尽可能利用TypeScript类型安全性
注:当我在(伪)代码示例中提到 obj2.b 等内容时: 我不是指字面上的 obj2.b。 而是某种检查编译时检查 b 是否实际上是 obj2 类型的属性的方式。
keyof obj2
。 - ASDFGerte[obj2.b, obj2.d]
来实现它。如果你想要这个答案,我可以写出来,只要你明白字符串键确实是唯一合理的解决方案,并且它绝对是类型安全的。 - jcalz[nameof(obj2.b),nameof(obj2.d)]
将在编译时转换为["b","d"]
。 优点:当重构这些属性时,IDE不会错过字符串。 缺点:它很冗长,需要一个插件。 - Thomas