簡體   English   中英

打字稿中抽象類的依賴注入

[英]Dependency injection of abstract class in typescript

我是TypeScript的新手,正在嘗試使用依賴項注入來創建擴展基本抽象UIObject類的UI對象,但遇到錯誤“無法創建抽象類的實例”

這是一個簡化的示例:

abstract class UIObject {
// Some methods
}

class Cursor extends UIObject {
// Some other methods
}

function create (UIObjectClass: typeof UIObject){
  return new UIObjectClass()
}

我想要的是create函數能夠將擴展UIObject的任何類作為參數,並創建該類的實例。 但是,由於UIObject是抽象類,因此無法工作,因為您無法實例化抽象類。

最好的方法是什么?

首先,您需要確保create接受一個類,而不是一個實例。

interface Constructable {
  new (...args: any[]): any;
}

function create<T extends Constructable>(UIObjectClass: T): InstanceType<T> {
  return new UIObjectClass();
}

這將使TypeScript僅接受具體的類。

create(UIObject);     // Error! Can't use an abstract class here.
create(Cursor);       // OK
create(new Cursor()); // Error! We should be passing a class, not an instance.

我還沒有找到一種方法來確保自變量UIObjectClass繼承自UIObject

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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