Создание экземпляра дочернего класса в статическом методе родителя с помощью другого вызова статического метода - PullRequest
0 голосов
/ 09 июня 2019

Проблема

У меня есть абстрактный класс Model:

abstract class Model{
    static find(id: number) {
        const instance = this.newInstance();
        // ...
        return instance;
    }

    static newInstance() {
        return new this;
    }
}

Конечно, мы получаем ошибку машинописного текста, говорящую Cannot create an instance of an abstract class.И мы можем решить эту проблему путем переопределения this метода newInstance:

abstract class Model{
    // ...
    static newInstance(this: new() => Model) {
        return new this;
    }
}

Но тогда проблема возникает в методе find: The 'this' context of type 'typeof Model' is not assignable to method's 'this' of type 'new () => Model'. Cannot assign an abstract constructor type to a non-abstract constructor type.

Переопределениеthis метода find, как в методе newInstance, не будет работать, потому что мы получим Property 'newInstance' does not exist on type 'new () => Model'.

Мое решение

Единственное решениеЯ мог найти добавление нового метода экземпляра в объявлении типа this:

abstract class Model {
    static find(this: {new: () => Model, newInstance: () => Model}, id: number) {
        // ...
    }
    // ...
}

Но это не очень практично, потому что в классе Model будет много статических методов.

Мой вопрос:

Как я могу вызвать статический класс, который создает экземпляр дочернего объекта из другого статического класса (в основном решение ошибок в приведенном выше коде)

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