在任何人将此标记为重复之前,请阅读以下内容,
我的场景不仅涉及 TypeScript,还涉及 Angular2。
目标
我需要 app.component.ts 中的一个方法,它接受一个字符串(类名)并创建它的一个实例。这些类存在于其他 ts 文件中。
现在来看用例:
我有一个方法 getWidgetObjectFromClassName(className : string) : Object{}
它需要返回字符串格式的类名实例。
现在的问题,
我尝试使用 NameSpace 并执行 let instance = new SampleNS['OtherName']();
(SampleNS 是一个命名空间),在单个文件的情况下工作得很好。
但是现在
我有多个 ts 文件,比如 interfaces.ts、classes.ts、otherclasses.ts。我正在使用 export namespace SampleNS{}
在 interface.ts 中一切正常,接下来在 classes.ts 中使用 /// <reference path="interfaces.ts" />
和相同的命名空间 SampleNS
.
现在我的方法getWidgetObjectFromClassName(className : string) : Object{}
在 xyz.ts 中,现在我应该给哪个导入?我的意思是,如果我说“从‘./interfaces’导入 {SampleNS}”。
这里的问题是我只能导入单个文件的命名空间(即使它是相同的)因此我创建实例仅限于导入该特定文件命名空间。
Plunker 链接 https://plnkr.co/edit/pt90F34KPsGoHDpSUQFD?p=preview
最佳答案
使用 as
导入 like
import * as widgets from './lib';
...
this.widgetInstance = new widgets[className]();
我记得这个来自另一个答案,但我找不到它来给予一些信任:-/
关于typescript - 根据类名 : string 创建类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38137840/