Предположим, у меня есть родительский класс со статическим методом, который возвращает экземпляр,
abstract class AbstractManager {
private static instance: AbstractManager;
constructor() {
AbstractManager.instance = this;
}
public static getInstance(): AbstractManager {
return this.instance
}
}
И у меня есть дочерний класс, который расширяет родительский класс,
class Manager extends AbstractManager {
constructor() {
super();
}
}
Если яinvoke Manager.getInstance()
тип возвращаемого значения родительского AbstractManager
.
Есть ли способ настроить родительский метод getInstance()
, чтобы он вместо этого возвращал дочерний тип?
Очевидно,Я могу добавить getInstance()
к каждому дочернему классу, возвращающему или приводящему к дочернему типу, но если у меня будет 100 подклассов, мне нужно будет написать метод 100 раз.
Хотя мои знания об обобщенияхограничено, еще одно решение, которое я попытался использовать с помощью обобщений, это:
public static getInstance<T extends AbstractManager>(): T {
return this.instance;
}
Но это вызвало ошибку Type 'AbstractManager' is not assignable to type 'T'.
Возможно ли установить его так, чтобы
Manager.getInstance() // is of type Manager not AbstractManager.
Или я должен подойти к этой проблеме по-другому?Спасибо.