我试图在Typescript中实现标准的抽象工厂模式,但编译器不合作.这是我的代码的简化版本:
abstract class Model { } class User extends Model { } abstract class ModelFactory{ constructor(private modelConstructor: T) {} public create(): T { return new (this.modelConstructor)(); // ERROR HERE } } class UserFactory extends ModelFactory { 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)();
编译时没有错误.然而,这是不幸的.有没有办法在不使用演员表的情况下使这段代码可编辑?如果没有,为什么不呢?
您应该使用此模式:
abstract class ModelFactory{ constructor(private modelConstructor: new () => T) { } public create(): T { return new (this.modelConstructor)(); // OK! } } class UserFactory extends ModelFactory { constructor() { super(User); } }