Я пытаюсь создать базовый класс, в котором наследующие классы должны реализовывать метод, который возвращает объекты того же типа, что и он сам.
abstract class Base {
abstract clone(): this;
}
class Impl extends Base {
clone(): this {
return new Impl();
}
}
К сожалению, я получаю эту ошибку.
Тип 'Impl' нельзя назначить для типа 'this'. «Impl» присваивается ограничению типа «this», но можно создать экземпляр «this» с другим подтипом ограничения «Impl». (2322)
Я могу обойти это с помощью приведения волхвы c:
abstract class Base {
abstract clone(): this;
}
class Impl extends Base {
clone(): this {
return new Impl() as this;
}
}
... но я не понимаю, почему это необходимо. Почему new Impl()
не относится к типу this
?