Функция, возвращающая тип класса в котором она находится
Описание
То, что я ищу очень похож на паттерн фабрика, но не одно и тоже. Есть вот такая конструкция:
class SettingsProgenitor {
static import<T extends SettingsProgenitor>(source: any): T {
throw new ReferenceError(`Not implemented function`);
}
}
Сразу скажу почему класс, а не интерфейс: интерфейс не поддерживает статические члены.
Теперь мне надо, чтобы любой другой класс, который наследует SettingsProgenitor имела статическую функцию import, которая вернет значение того же типа, в котором эта функция находится. То есть:
class A extends SettingsProgenitor {
static override import(source: any): A {
return new A();
}
}
class B extends SettingsProgenitor {
static override import(source: any): B {
return new B();
}
}
Пример, описанный сверху не работает, поскольку классы считаются не реализоваными. А если реализовать вот так:
class A extends SettingsProgenitor {
static import<T extends SettingsProgenitor>(source: any): T {
return new A();
}
}
class B extends SettingsProgenitor {
static import<T extends SettingsProgenitor>(source: any): T {
return new B();
}
}
...то ошибка Type 'A' is not assignable to type 'T'.
Вопрос
Как эту проблему можно решить? Я попробовал все варианты которые предлагали ответы SO и ChatGPT - не помогло.