網站搜尋

字典 - 策略 - 在 TypeScript 中輸入的字串


我正在使用 TypeScript,我想將一個字串對應到一個類型,以便我可以根據我擁有的字串創建某個類型的實例。

我正在寫給 node.js

例如——我從資料庫取得值「range」,在這種情況下我想使用我的類別「RangeFilter」,但是在值為「size」的情況下,我想使用類別「SizeFilter」。它們都繼承自介面「IFilter」.

那麼有沒有辦法在這些值與類型之間建立映射(創建字典)?

所以它可能是這樣

map: {key: string, value: IFilter};

返回新的 map["range"]/返回 RangeFilter

答案#1

有一種方法。
基本上你需要知道的是,類別 MyClass 的類型是:{ new(): MyClass }。

然後你可以這樣做:

interface IFilter {}

type FilterConstructor = { new(): IFilter };

class RangeFilter implements IFilter {}

class SizeFilter implements IFilter {}

let ctors: { [key: string]: FilterConstructor } = {};
ctors["range"] = RangeFilter;
ctors["size"] = SizeFilter;

function factory<T extends IFilter>(key: string): T {
    let ctor = ctors[key];

    return ctor == null ? null : new ctor() as T;
}

let rangeFilter: RangeFilter = factory("range");

(在遊樂場中的程式碼)