策略 - 在打字稿中输入的字符串

Strategy - string to type in typescript

我正在使用打字稿,我想将一个字符串映射到一个类型,这样我就可以根据我拥有的字符串创建特定类型的实例。

我正在写信给 node.js

例如 - 我从数据库中得到值“range”,对于这种情况我想使用我的 class“RangeFilter”,但对于值“size”我想使用class“SizeFilter”。它们都继承自“IFilter”接口。

那么有没有办法将值映射(创建字典)到类型

所以可以这样

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

Return new map["range"] //returns RangeFilter

有办法。
基本上你需要知道的是 class 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");

(code in playground)