簡體   English   中英

如何在Typescript中創建抽象工廠模式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM