Определение глобальных переменных в мини-программе 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, вы должны экспортировать их из модуля, а не загружать их в глобальное пространство имен.

Другие вопросы по тегам