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的情況下編譯這些代碼?如果不是,爲什麼不呢?
不錯!不知道那種語法。 –