Я изо всех сил пытаюсь определить, как написать код TypeScipt, который говорит, что этот конструктор возврата функции универсального типа. Существует множество примеров того, как передать конструктор универсального типа, но не того, как его вернуть.
Пожалуйста, проверьте следующий пример:
Это часть абстрактного класса:
getModel(): (new () => T) {
throw new Error('Method not implemented.'); // Error because don't know how to fix it
}
Когда в производном классе я пытаюсь реализовать это так:
getModel(): typeof User {
return User;
}
У меня следующая ошибка:
Type '() => typeof User' is not assignable to type '() => new () => User'.
Я мог бы пропустить реализацию в производном классе, если бы знал, как указать в абстрактном классе.
Итак, вопрос в том, как указать на уровне абстрактного класса, что метод возвращает конструктор универсального типа, и я могу пропустить реализацию этого метода на уровне дочернего класса? Или, может быть, я неправильно указал обратную подпись на уровне абстрактного класса?
РЕДАКТИРОВАТЬ:
Пожалуйста, проверьте странную проблему. Классы A и B отличаются только наличием явного конструктора. И в RealA не работает, а в RealB работает тот же метод getModel ().
class A {
a = '';
constructor(a: string) {
}
}
class B {
a = '';
static test(): void {
console.log('I do work');
}
}
abstract class Base<T> {
Prop: T;
constructor(TCreator: { new (): T; }) {
this.Prop = new TCreator();
}
getModel(): (new () => T) {
throw new Error('Method not implemented.'); // Error because don't know how to fix it
}
}
class RealA extends Base<A> {
getModel(): typeof A { // doesn't work - compilation error
return A;
}
}
class RealB extends Base<B> {
getModel(): typeof B { // works
return B;
}
}
var test = new RealA(A); // compile error
var test2 = new RealB(B)
Для класса RealA такая же ошибка
() => typeof A' is not assignable to type '() => new () => A'
T
по какой-то причине является типом конструктора, а не типом экземпляра. Обратите внимание, что типUser
и значениеUser
различаются и что типtypeof User
не совпадает с типомUser
. Вы должны опубликовать минимальный воспроизводимый пример, чтобы кто-то точно определил проблему. - person jcalz   schedule 02.12.2018getModel() { return this.constructor; }
в базе вместо того, чтобы реализовывать его в каждом производном классе - person Aleksey L.   schedule 03.12.2018