Определение глобальных переменных в мини-программе TypeScript для WeChat
Уважаемые пользователи Stackru,
Я сделал модуль как для браузера, так и для мини-программы WeChat. Этот модуль написан на нескольких TypeScript и скомпилирован в один минифицированный файл. В этом модуле мне нужно использовать API-интерфейсы DOM/BOM, такие какdocument
, 'окно, 'navigator
. В браузере загрузка и использование скомпилированного файла не вызывает проблем.
Но в мини-программе WeChat нет global
объект как на Node. И нетdocument
а также window
глобальные объекты как в браузере. Чтобы исправить это, я сделал две команды сборки для каждой среды.
grunt build
, стандартная компиляция TS для браузераgrunt wx_build
, стандартная компиляция TS и добавление кода патча для мини-программы WeChat
Патченный файл 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")...
В проекте мини-программы WeChat я поставил mymodule-bundle.min.js
а также miniapp-adapter
в той же папке. В результате я смог перенести свое приложение HTML5 в мини-программу WeChat.
Но мне нужен более разумный способ сделать это.
Как я могу объявить
window
илиdocument
глобальная переменная вmymodule.ts
для выполнения мини-программы WeChat?
Спасибо.
1 ответ
Вот как вы их объявляете:
declare const document: any
declare const window: any
Чтобы получить более качественные типы для intellisense, вы просто сделаете их того типа, который представляет то, что вы туда поместили, если вам нужны потребители, чтобы их использовать. В противном случае вы можете оставить их такими.
В 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, вы должны экспортировать их из модуля, а не загружать их в глобальное пространство имен.