Javascript 将Typescript模块编译到AMD,但不将结果包装到对象中,例如Foo.Foo

Javascript 将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 () {...} }); }); 在消费

我正在将一个大型主干应用程序的一部分转换为使用Typescript。一些核心js文件已转换为Typescript,并被其他非TS js文件引用

在转换之前,我们的requirejs模块的形式如下:

View.js

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;
}