Определение глобальных переменных в программе TypeScript for WeChat mini - PullRequest
1 голос
/ 22 февраля 2020

Уважаемые пользователи StackOverflow,

Я создал модуль для браузера и Мини-программы WeChat . Этот модуль написан на нескольких TypeScript и скомпилирован в один минимизированный файл. В этом модуле мне нужно использовать API DOM / BOM, такие как document, 'window , 'navigator. В браузере загрузка и использование скомпилированного файла не имеют проблем.

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

0 голосов
/ 22 февраля 2020

Вот как вы их объявляете:

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;

Чтобы быть идиоматическим c на узле, вы должны экспортировать их из модуля, а не чем загружать их в глобальное пространство имен.

...