Как обойти ошибку при использовании Spread для создания копии объекта, где класс объекта имеет абстрактные методы? - PullRequest
0 голосов
/ 19 октября 2018

В следующем коде у меня есть абстрактный класс, который требует расширенных классов для реализации абстрактного метода.При использовании «распространенного» синтаксиса, жалуется, что реализация абстрактного метода отсутствует.

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

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

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

Как вы используете распространение, чтобы сделать копию объекта класса с абстрактными методами?Если не можете, есть ли способ обойти это?

Вот пример кода: https://stackblitz.com/edit/typescript-zuryyw

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

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

0 голосов
/ 19 октября 2018

По определению вы не можете создать экземпляр абстрактного класса - независимо от того, какой механизм вы используете.

РЕДАКТИРОВАТЬ НА ОСНОВЕ КОММЕНТАРИЙ

Спред создастновый объект, он не будет иметь тип Test, поэтому присвоение переменной типа Test будет основано на том, что он имеет те же свойства и методы.

Это можно сделать, удаливfunc из Test, но вы не можете, когда он там, потому что объект, созданный распространением, не имеет всех свойств и методов Test.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...