在 TypeScript 中使用字符串名称创建新类

18
我正在编写一个 XML 加载器/解析器(并且刚接触 TypeScript),我可以成功地加载 XML,但是我想要将 XML 数据动态解析为一个类/对象。问题在于,我想使用一个字符串变量创建一个类;例如: var classNameString:String = "className"; 通过我的多次互联网搜索,似乎不可能做到这一点,我不得不硬编码类名。如有帮助,将不胜感激。

就是这个,非常感谢! - user3171294
1个回答

30

如果您有一个特定的命名空间,想要创建所有类,您可以这样做:

var newClass: any = new (<any>MyNamespace)[classNameString](parametersIfAny);

如果它们在默认命名空间中,你可以简单地使用 window:

var newClass: any = new (<any>window)[classNameString](parametersIfAny);

更新

现在需要使用最新的TypeScript将<any>进行转换,否则会出现错误Error TS7017 Build:Element implicitly has an 'any' type because type '{}' has no index signature.


1
非常好用... 简洁明了! - born2net
这在Node.js中也可以工作吗? - Jaume Mussons Abad
@JaumeMussonsAbad:你可以试一试,然后告诉我结果。假设nodejs仍然使用标准实例创建方式,这应该是可行的(如果命名空间正确的话)。 - iCollect.it Ltd
3
我的第一个结果显示它在nodejs中不起作用:“ReferenceError: window未定义”。 - isgoed
@isgoed:这个代码从未在nodejs上测试过,因此您可能会有其他命名空间存在。请提出一个新问题,展示您的代码。谢谢。 - iCollect.it Ltd
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接