[英]How do dynamically instantiate using typescript's external modules
我们开始在项目中使用requirejs并将所有内部模块转换为外部模块。
我在动态实例化类时遇到问题。 我们需要能够使用简单的点符号字符串实例化类。
当所有模块都位于内部时,可以通过window对象访问它们。 这是一个例子:
// file - TestAction.ts
module cb.action {
export class TestAction {
constructor() {}
}
}
通过将以下函数与className =“ cb.action.TestAction”一起使用,我们可以轻松获取TestAction实例。
var instantiateByName = function (className) {
"use strict";
var ClassName2 = className.split('.').reduce(function (current, name) {
return current[name];
}, window);
return new ClassName2();
};
现在,我们将所有模块更改为外部模块,TestAction.ts文件现在看起来像这样:
// file - TestAction.ts
export class TestAction {
constructor() {}
}
2个主要问题:-根据接收的点符号字符串,我需要导入其他文件。 (动态需要一个文件)-我需要与上面的InstantiateByName函数等效的函数,因为我不能再使用window对象了。
期待您的意见
我会稍微改变模块结构(如果每个文件使用一个类...)
class TestAction {
constructor() {}
}
export = TestAction;
然后,可以使用RequireJS iteself来代替按名称动态加载模块的方法...
// Instead of 'instantiateByName'...
import TestAction = require('./action/TestAction');
var myAction = new TestAction();
这被编译为以下内容...
define(["require", "exports", './action/TestAction'], function(require, exports, TestAction) {
var myAction = new TestAction();
});
这可以处理RequireJS异步加载脚本文件的事实。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.