Я пытаюсь реализовать стандартный абстрактный шаблон фабрики в Typcript, но компилятор не работает. Вот упрощенная версия моего кода:Как создать абстрактный заводской шаблон в TypScript?
abstract class Model { }
class User extends Model { }
abstract class ModelFactory<T extends typeof Model> {
constructor(private modelConstructor: T) {}
public create(): T {
return new (this.modelConstructor)(); // ERROR HERE
}
}
class UserFactory extends ModelFactory<typeof User> {
constructor() {
super(User);
}
}
let user: User;
user = new UserFactory().create();
Однако, когда я компилирую с помощью TSC 2.1, я получаю следующее сообщение об ошибке в строке указана выше:
model.ts(8,13): error TS2511: Cannot create an instance of the abstract class 'Model'.
Если удалить типобезопасность и конвертировать строка 0:
return new (this.modelConstructor as any)();
Код компилируется без ошибок. Однако это печально. Есть ли способ сделать этот код компилируемым без использования броска? И если нет, то почему?
Ницца! Не знал об этом синтаксисе. –