Javascript 将Typescript模块编译到AMD,但不将结果包装到对象中,例如Foo.Foo
我正在将一个大型主干应用程序的一部分转换为使用Typescript。一些核心js文件已转换为Typescript,并被其他非TS js文件引用 在转换之前,我们的requirejs模块的形式如下: View.jsJavascript 将Typescript模块编译到AMD,但不将结果包装到对象中,例如Foo.Foo,javascript,backbone.js,module,typescript,amd,Javascript,Backbone.js,Module,Typescript,Amd,我正在将一个大型主干应用程序的一部分转换为使用Typescript。一些核心js文件已转换为Typescript,并被其他非TS js文件引用 在转换之前,我们的requirejs模块的形式如下: View.js define([backbone, deps...], function (backbone, deps...) { return backbone.View.extend({ render: function () {...} }); }); 在消费
define([backbone, deps...], function (backbone, deps...) {
return backbone.View.extend({
render: function () {...}
});
});
在消费代码中,我们可以做到:
define([View, ...], function (View,....) {
var view = new View({...});
view.render();
});
使用Typescript外部模块和导出,我可以将包含Typescript类的文件编译到AMD,但生成的代码将导出对象上的属性设置为结果,这意味着使用的代码现在看起来是这样的,因为文件名是View.js:
var view = new View.View();
这很烦人,也意味着我们不能在没有更改的情况下(尽管更改很小)保持与遗留非TS代码的向后兼容性。有什么办法可以解决这个问题吗
编辑:
相关生成代码(定义回调)
我们的目标是在typescript中包含一些核心组件,这样我们就可以继续使用TS,而其他较旧的库则需要完整的js组件。您是否提出了
View.render()
在模块/名称空间中?View.js在未编译Typescript的普通requirejs模块中使用。在View.ts视图中是一个类,例如导出类视图{}实际上是一个坏例子,我将对其进行更改,以更紧密地反映视图的用例。我认为您应该在视图中使用export=ViewClass
。然后您应该能够使用import View=require(“someView”);变量视图=新视图()
function (require, exports) {
var Backbone = require('backbone');
var View = (function (_super) {
__extends(View, _super);
function View(options) {
_super.call(this, options);
}
})(Backbone.View);
exports.View = View;
}