Функция, возвращающая тип класса в котором она находится

Описание

То, что я ищу очень похож на паттерн фабрика, но не одно и тоже. Есть вот такая конструкция:

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 - не помогло.


Ответы (0 шт):