使用 Spread 在对象 class 具有抽象方法的情况下制作对象副本时如何解决错误?

How to get around the error when using Spread to make an object copy where the object class has abstract methods?

在下面的代码中,我有一个抽象class,它需要扩展classes来实现一个抽象方法。使用 "spread" 语法时,它会抱怨缺少抽象方法的实现。

abstract class Test {
    abstract func(): void;
}

class Test1 extends Test {
    func(): void {}
}

function funcTest(): void {
    const test1: Test = new Test1();
    const test: Test = {...test1};
}

如何使用 spread 通过抽象方法复制 class 的对象?如果不能,有什么解决办法吗?

示例代码如下:https://stackblitz.com/edit/typescript-zuryyw

根据定义,您不能创建抽象的实例 class - 无论您使用哪种机制。

根据评论进行编辑

Spread 将创建一个新对象,它不会是 Test 类型,因此对 Test 类型变量的赋值将基于它具有相同的属性和方法。

当您从 Test 中删除 func 时,您可以完成此操作,但当它存在时您不能这样做,因为 spread 创建的对象不具有 [=] 的所有属性和方法10=].

Object.assign 将对自己的属性和方法进行浅表复制,因此应该在此处执行此操作。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

但是,如果您的实际代码更复杂,则可能需要多种方法的组合。我建议 google 在 javascript 中复制对象。

https://scotch.io/bar-talk/copying-objects-in-javascript