Тип унаследованного от TypeScript класса в аргументе конструктора базового класса - PullRequest
0 голосов
/ 19 июня 2020

Мне нужно каким-то образом получить дочерний класс, который наследует некоторый базовый класс в своем конструкторе. Для большей ясности это будет работать так:

class BaseClass {
    public constructor(arg1: typeof /* here any class that actually inherits, in this example ChildClass */) {}
}

class ChildClass extends BaseClass {
    public prop: string;
}

// Now This will work
new ChildClass(ChildClass);

// but this won't as arg1 is not of type ChildClass
new ChildClass(BaseClass)

На данный момент у меня есть следующее решение:

class BaseClass<T extends BaseClass<any>> {
    public constructor(arg1: typeof T) {}
}

class ChildClass extends BaseClass<ChildClass> {
    public prop: string;
}

И в целом это отлично работает, но чем больше наследований, тем больше проблем будет некоторые настройки для создания следующего класса, наследующего ChildClass. Есть ли способ получить тип унаследованного класса в родительском классе без дженериков? Я знаю некоторые решения для достижения этого в stati c и членах экземпляра, но, к сожалению, ни одно из них не работает для конструктора

...