我一直在创建一个小型图书馆"我将用于Http请求。它是用TypeScript编写的,它有一个主要类Http
。我希望能够在包含我的编译包之后在我的普通JavaScript中使用这个类,所以我正在思考如何让它在全球范围内可用。
我使用gulp-tsify
作为编译器,它确实将我的TypeScript编译到es5包中,这很好,但是作为自调用函数在不同的范围内。当我在编译之后重写我的包(下面的代码)时,它工作正常,但是如何在不重写包脚本的情况下实现呢?
我的意思是......我编译的TypeScript如下所示:
(function e(t,n,r){ ... })(function(require, module, exports){
...
// Somewhere here I've got var Http_1 = require('/...');
}, n, r)
// console.log(Http_1) -> undefined
当我宣布全局http(手动)...
时var http;
(function e(t,n,r){
...
})(function(require, module, exports){
...
// Somewhere here I've got var Http_1 = require('/...')
http = Http_1;
// or I can do this without the Http_1
http = require('./classes/Http');
}, n, r)
// console.log(http) -> everything's fine
...用户可以使用http对象,但我希望它由编译器自动完成。
我正在考虑像TypeScript中的declare var http = Http;
这样的东西,但我无法实现这一点,因为Initializers are not allowed in ambient contexts.
有关如何做到这一点的任何想法?谢谢。
答案 0 :(得分:1)
要添加浏览器全局,只需将项目附加到窗口对象即可。
window['Http'] = Http;
答案 1 :(得分:0)
使用特殊的全局语法:
declare global {
interface Window {
you: IAreCookingWithFire;
}
var you: IAreCookingWithFire;
}