2
我试图在Typescript中实现一个标准的抽象工厂模式,但是编译器不是合作的。这里是我的代码的简化版本:如何在Typescript中创建抽象工厂模式?
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'.
如果我删除类型安全和转换该行为:
return new (this.modelConstructor as any)();
代码编译时没有错误。但是,这是不幸的。有没有什么办法可以在不使用cast的情况下编译这些代码?如果不是,为什么不呢?
不错!不知道那种语法。 –