我们正在使用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?
答案 0 :(得分:1)
假设您在浏览器中使用AMD模块:此处的难易程度取决于在处理脚本时是否必须为第三方代码定义MyModule,还是在调用某个特定函数之前。
如果第三方脚本加载正常,那么您的“main”需求语句是唯一需要更改的内容。 (主要是指单个入口点为RequireJS recommends。)您需要做的就是将MyModule添加到依赖项列表中并将其保存到全局对象中。
require(["MyModule", ...], function(MyModule, ...) {
(<any>window).MyModule = MyModule;
// the rest of your code
});
此处 window
被强制转换为any
,因此编译器不会抱怨该窗口.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 -->