Я создаю модуль npm в TypeScript https://www.npmjs.com/package/html2commonmark. Модуль можно использовать в nodejs (используя require
) и из браузера (загружая node_modules/html2commonmark/dist/client/bundle.js
в ваш браузер).
Недавно я добавил файлы * .d.ts, чтобы получать информацию о вводе при использовании "moduleResolution": "node"
. Это отлично работает, при установке моего модуля он готов для использования в машинописном тексте. Таким образом: следующий фрагмент машинописного кода компилируется без ошибок:
// After installing using npm install html2commonmark
// using "moduleResolution": "node"
import * as html2commonmark from 'html2commonmark';
let converter = new html2commonmark.JSDomConverter();
Красивый!
Теперь я хочу запустить свой модуль в браузере. Как упоминалось ранее, мне нужно добавить тег скрипта в node_modules/html2commonmark/dist/client/bundle.js
на мою страницу index.html. После этого должна быть доступна глобальная переменная html2commonmark. Проблема в следующем: как я могу сообщить компиляции машинописного текста о наличии глобальной переменной? Следующий фрагмент кода TS не компилируется:
let converter = new html2commonmark.BrowserConverter();
// error TS2304: Cannot find name 'html2commonmark'.
Даже если я добавлю файл global.d.ts, мне не удастся импортировать внешний модуль и объявить глобальную переменную:
// Something like this does not work :(
import * as b from 'html2commonmark';
declare var html2commonmark: typeof b;
Я понимаю, почему это так. Используя ключевое слово import, мой ts-файл преобразуется во внешний модуль, и поэтому его необходимо импортировать. Тем не менее, я чувствую, что мой сценарий является обычным. А именно: модуль npm, содержащий как компонент npm, так и пакет для браузера, который предоставляет функциональность как глобальную переменную.
Есть ли способ объявить глобальную переменную, используя определение внутри моего внешнего модуля? Мне не хочется переписывать свой api как пространство имен (в стиле Определенного Типа), в то время как я только что написал весь исходный код в TS ...