在微信小程序TypeScript中定义全局变量



尊敬的StackOverflow用户,

我为浏览器微信小程序制作了一个模块。该模块用多个TypeScript编写,并编译为一个缩小的文件。在该模块中,我需要使用DOM/BOM API,如document、窗口, 'navigator。在浏览器上,加载和使用编译后的单个文件没有问题。

但在微信小程序上,没有Node上的global对象。浏览器上也没有documentwindow全局对象。为了解决这个问题,我为每个环境制作了两个构建命令。

  • grunt build,用于浏览器的标准TS编译
  • grunt wx_build,微信小程序标准TS编译及附加补丁代码

修补后的js文件看起来像:

// mymodule-bundle.min.js
// patch
window=require("./miniapp-adapter/src/index.js");
document=require("./miniapp-adapter/src/document.js").default;
// original compiled/minified code
(function(f){if(typeof exports==="object"&&typeof module!=="undefined")...

在微信小程序项目中,我把mymodule-bundle.min.jsminiapp-adapter放在同一个文件夹中。因此,我可以将我的HTML5应用程序移植到微信小程序中。

但我想要一个更聪明的方法来做到这一点。

微信小程序运行时,如何在mymodule.ts中声明windowdocument全局变量

谢谢。

以下是如何声明它们:

declare const document: any
declare const window: any

为了获得更好的intelligense类型,如果你需要消费者使用它们,你只需将它们制作成代表你所放内容的类型。否则你就可以这样离开他们。

在Node中,您可以这样做:

declare namespace NodeJS {
export interface Global {
window: any
document: any
}
}
global.window = require("./miniapp-adapter/src/index.js");
global.document = require("./miniapp-adapter/src/document.js").default;

不过,为了在Node上惯用,您应该从模块中导出它们,而不是将它们加载到全局命名空间中。

最新更新