基于ClassName创建类的实例:string

Pra*_*kar 7 typescript typescript1.8 angular

在任何人将此标记为重复之前,请阅读下文,

我的场景不仅涉及TypeScript,还涉及Angular2.

目的

我需要app.component.ts中的一个方法,它接受一个字符串(Class Name)并创建一个实例.这些类存在于其他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'说`import {SampleNS}.这里的问题是我只能导入单个文件的命名空间(即使它是相同的)因此我创建实例仅限于导入该特定文件命名空间.

Plunker Link https://plnkr.co/edit/pt90F34KPsGoHDpSUQFD?p=preview

Gün*_*uer 12

as与导入一样使用

import * as widgets from './lib';
...
this.widgetInstance = new widgets[className](); 
Run Code Online (Sandbox Code Playgroud)

Plunker的例子

我从另一个答案中记得这个,但我找不到它给予一些信任: - /