Первая проблема заключается в том, что dts-gen
необходимо фактически загрузить указанный вами модуль, чтобы проверить его структуру, а jquery-colorbox
ожидает, что jQuery
, document
и window
будут определены в глобальном объекте , которых нет в Node.js. Один из возможных подходов (который я не преследовал) - использовать экспериментальную поддержку dts-gen
для генерации объявлений на основе браузера . Другой способ - загрузить совместимую с Node.js реализацию DOM, такую как jsdom
, и установить необходимые глобальные переменные, чтобы вы могли успешно загрузить jquery-colorbox
. В частности, если вы напишите в файле с именем jquery-colorbox-wrapper.js
следующее (на основе этот ответ ):
var jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.jQuery = require('jquery')(window);
global.document = document;
global.window = window;
require("jquery-colorbox");
и затем запустите dts-gen --expression-file jquery-colorbox-wrapper.js
, он должен успешно работать.
Тогда вы столкнетесь со второй проблемой: сгенерированный файл объявления пуст, потому что jquery-colorbox
, как плагин jQuery, добавляет объекты в объект jQuery и не имеет собственного экспорта. Если вы измените скрипт-обертку так, чтобы он возвращал объект jQuery, тогда вы получите объявления для jquery-colorbox
, смешанные с объявлениями самого jQuery. Разумный подход состоит в том, чтобы различать файлы объявлений, которые вы получаете для jQuery с jquery-colorbox
и без него. То есть, добавьте global.jQuery;
к файлу jquery-colorbox-wrapper.js
, как указано выше, запустите dts-gen
один раз, затем закомментируйте строку require("jquery-colorbox");
и снова запустите dts-gen
с другим выходным файлом, и, наконец, отразите два файла. Это оставляет меня с jquery-colorbox
-специфичными объявлениями, а также с некоторыми различиями в sizzle*
переменных, имена которых содержат метку времени, которую легко удалить. Конечно, файл декларации потребует значительной очистки.