@romaro

Как типизировать сигнатуру фабрики, которая принимает базовые классы?

Как обойтись без any в фабричной функции? По смыслу это что-то вроде Page: typeof Page, т.к. нужно сослаться на конструктор передаваемого в функцию класса:

abstract class PageServ {
    abstract templateName: string;
    abstract httpStatus: number;
    constructor() {
    }

    get template(): string {
        return this.templateName + '.html';
    }
}

const MainPageServ = class extends PageServ {
    public templateName: string;
    public httpStatus: number;
    constructor() {
        super();
        this.templateName = 'MainPage';
        this.httpStatus = 200;
    }
}

function fabric(Page: any) {
    const inst = new Page;
    console.log(inst.httpStatus);
}

fabric(MainPageServ)


Код в песочнице.
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
RAX7
@RAX7
В документации тайпскрипта есть пример, как типизировать функцию, которая принимает конструктор класса в качестве аргумента:
https://www.typescriptlang.org/docs/handbook/2/cla...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы