使用 Object.assign() 时如何忽略只有 getter 的属性?
How to ignore properties with only a getter when using Object.assign()?
我有一个未定义类型的对象源,但表示一个类型化对象。所以我正在使用 Object.assign(target, source)。但是我的 class 具有 getter 的属性(因为它们是其他属性的计算结果)。
一个例子:
source: {
a: 1,
b: 2,
sum: 3
}
class SomeClass {
a: number;
b: number;
get sum(): number {
return a + b;
}
}
someFunction() {
let obj = new SomeClass();
Object.assign(obj, source);
}
在上述情况下,我得到一个错误:
无法设置 [object Object] 的 属性 总和,它只有 getter。
Object.assign() 是否可以忽略源对象中的那些属性?
你不能为此使用 Object.assign()
,because
The Object.assign() method is used to copy the values of all
enumerable own properties from one or more source objects to a target
object.
换句话说,Object.assign()
由 source
的可枚举属性驱动,不受目标中属性定义方式的影响。
您必须实现自己的函数,而不是 Object.assign()
,这将跳过目标不可写的属性,或者找到一些执行此操作的库。
对此的一个 hacky 解决方案是只有一个空 setter:
get sum(): number {
return a + b;
}
set sum(value) {}
我有一个未定义类型的对象源,但表示一个类型化对象。所以我正在使用 Object.assign(target, source)。但是我的 class 具有 getter 的属性(因为它们是其他属性的计算结果)。
一个例子:
source: {
a: 1,
b: 2,
sum: 3
}
class SomeClass {
a: number;
b: number;
get sum(): number {
return a + b;
}
}
someFunction() {
let obj = new SomeClass();
Object.assign(obj, source);
}
在上述情况下,我得到一个错误: 无法设置 [object Object] 的 属性 总和,它只有 getter。
Object.assign() 是否可以忽略源对象中的那些属性?
你不能为此使用 Object.assign()
,because
The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object.
换句话说,Object.assign()
由 source
的可枚举属性驱动,不受目标中属性定义方式的影响。
您必须实现自己的函数,而不是 Object.assign()
,这将跳过目标不可写的属性,或者找到一些执行此操作的库。
对此的一个 hacky 解决方案是只有一个空 setter:
get sum(): number {
return a + b;
}
set sum(value) {}