[英]How do I create an abstract factory pattern in 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)();
編譯時沒有錯誤。 然而,這是不幸的。 有沒有辦法在不使用演員表的情況下使這段代碼可編輯? 如果沒有,為什么不呢?
您應該使用此模式:
abstract class ModelFactory<T extends Model> {
constructor(private modelConstructor: new () => T) { }
public create(): T {
return new (this.modelConstructor)(); // OK!
}
}
class UserFactory extends ModelFactory<User> {
constructor() {
super(User);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.