typescript - 根据类名 : string 创建类的实例

标签 typescript angular typescript1.8

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

我的场景不仅涉及 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](); 

Plunker example

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

关于typescript - 根据类名 : string 创建类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38137840/

相关文章:

typescript - 无法让 typescript 调试工作

reactjs - "Missing return type on function"样式组件插值函数错误

angular - 如何知道所有 Angular2 HTTP 调用何时完成

html - 文本区域中的 Angular 2 多种字体颜色

typescript - 如何安装旧版本的 Typescript?

typescript - 在哪里/如何为私有(private)的、范围内的 npm 模块添加 d.ts?

typescript - 通过返回类型的调用签名联合缩小函数类型

javascript - angular2(typescript) 从另一个文件导出变量

visual-studio-2015 - 如何防止 Visual Studio 的 tsconfig 检测到其他项目中的 tsconfigs?

javascript - 在 VScode 编辑器中显示 Javascript 的 Intellisense 错误