1

我们正在使用 TypeScript 更新我们的网络应用程序,现在我们遇到了这个问题。这是我们的静态类 MyModule.js:

MyModule = {};
MyModule.Constants = function(){};
MyModule.Constants.WIDTH = 100;
MyModule.Constants.HEIGHT = 100;
.......

现在我们把它改成这样,MyModule.ts:

module MyModule {
    export class Constants {
        public static WIDTH:number = 100;
        public static HEIGHT:number = 100;
        ....
    }
} 
export = MyModule;

这对我们来说很好用,使用 import/require 语句,但是我们无法更改来自第三方的一些类(在 javascript 中),并且它们无法访问 MyModule.Constants 静态属性,因为 MyModule 未定义为他们。

那么无论如何要编码以使 MyModule 和 MyModule.Constants 是 globar var 吗?

4

1 回答 1

1

假设您在浏览器中使用 AMD 模块:这里的难度取决于是否必须在处理脚本时为第三方代码定义 MyModule,或者就在您调用某些特定函数之前。

如果第三方脚本可以正常加载,那么您的“main” requires 语句是唯一需要更改的内容。(我指的是RequireJS 推荐的单一入口点。)您需要做的就是将 MyModule 添加到依赖项列表并将其保存到全局对象中。

require(["MyModule", ...], function(MyModule, ...) {
    (<any>window).MyModule = MyModule;
    // the rest of your code
});

window被强制转换到any这里,以便编译器不会抱怨 window.MyModule 尚未定义。

如果您的第三方脚本在没有定义 MyModule 的情况下甚至无法加载,事情就会变得更加艰难。我认为最简单的解决方案是删除该export = MyModule;行以使该脚本不是模块并单独/同步加载它。所以你的 HTML 文件会是这样的:

    <script type="text/javascript" src="scripts/MyModule.js"></script>
    <script type="text/javascript" src="thirdpartylib.js"></script>
    <script type="text/javascript" data-main="scripts/main" src="requirejs.js"></script>
    <!-- etc -->
于 2013-11-05T16:20:06.690 回答