使用 Object.assign() 时如何忽略只有 getter 的属性?

Rob*_*soa 5 ecmascript-5 typescript

我有一个没有定义类型的对象源,但代表一个类型对象。所以我正在使用 Object.assign(target, source)。但我的类具有 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);
}
Run Code Online (Sandbox Code Playgroud)

在上述情况下,我收到错误: Cannot set property sum of [object Object] which has only a getter

有什么方法可以让 Object.assign() 忽略源对象中的这些属性吗?

art*_*tem 2

你不能用Object.assign()它,因为

Object.assign() 方法用于将所有可枚举自身属性的值从一个或多个源对象复制到目标对象。

换句话说,Object.assign()由可枚举属性驱动source,并且不受目标中定义属性的方式影响。

您必须实现自己的函数,而Object.assign()不是跳过目标不可写的属性,或者找到一些可以执行此操作的库。