【问题标题】:Strategy - string to type in typescript策略 - 输入打字稿的字符串
【发布时间】:2016-07-13 11:20:34
【问题描述】:

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

我正在给 node.js 写信

例如 - 我从数据库中获取值“范围”,在这种情况下,我想使用我的类“RangeFilter”,但在值“大小”的情况下,我想使用类“SizeFilter”。它们都继承自接口“IFilter”。

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

原来是这样的

映射:{键:字符串,值:IFilter};

return new map["range"] //返回 RangeFilter

【问题讨论】:

标签: dictionary typescript strategy-pattern


【解决方案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");

(code in playground)

【讨论】:

  • 谢谢!帮了大忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 2017-06-08
相关资源
最近更新 更多