Я пытаюсь применить новую документацию к устаревшему коду, который
- Недокументированный
- Минимизирован (у нас нет исходного кода)
- Включенов остальном коде через
window.thing = thing
в минимизированном файле вместо использования модулей и экспорта. - Используется буквально везде.Это базовая структура для всего веб-приложения.
Мое главное намерение - заставить vsCode отображать некоторое значение для этого модуля при создании новой страницы / файла, а не копировать и вставлять код из другого модуля.страниц / файлов, прежде чем он скажет мне, как использовать методы модуля.И даже тогда, это не говорит мне, как это работает.Хотя через несколько месяцев я теперь могу написать этот код несколько надежно, не глядя, мне пришлось распутать минимизированный файл, чтобы найти все доступные методы и свойства.Я должен копировать и вставлять импорт, а не весь чертов файл.Мы также собираем новых разработчиков в ближайшее время, и (хотя коллеги не согласны), я хочу, чтобы у них было что-то большее, чтобы они могли взглянуть на них, а затем просто «следовать шаблону на других страницах».
Мы используем веб-пакети иметь возможность использовать модули.Я предпочитаю шаблон модуля, но понятно, что те, кто был до нас, не сделали.Использование window.thing для использования модуля между файлами.Мои коллеги предпочитают «следовать уже существующему шаблону», а не пытаться исправить старый код.Я не от всей души не согласен, но все же.Поэтому мне нужно сделать это как можно более ненавязчивым.
webapp / Documentation / main.js
import './thing.js';
/**@type {thing}**/
var thing; // This does not work. `thing` is marked as any.
// So I changed the type to thingModule.
/**@type {thingModule}**/
var thing; // This works.
/**@type {thingModule}*/
window.thing; // This does not work.
/**@type {thingModule}**/
var thing = window.thing; // Works for thing
// But does not change window.thing
Однако ни один из вышеперечисленных не распространяется на следующий файл.
webapp / view / someFile.js
import '../../documentation/main.js';
/**@type {thingModule}**/ var thing = window.thing;
// Cannot change below this line //
thing.addView(/*blah blah blah*/);
thing.doStuff();
Это позволяет мне искать свойства thing .Но это немного меняет код.Не много, но достаточно, чтобы на него не нахмурились, если оставить в коде после фиксации.Кроме того, если я найду другие модули, которым нужна аналогичная документация, мне не нужен растущий оператор импорта только для документации.Мне нужно иметь возможность включить его в одну строку, которая предоставляет только документацию.
import '../../documentation/main.js';
// Cannot change below this line //
thing.addView(/*blah blah blah*/);
thing.doStuff();
В этом случае thing отображается как ': any' вместо ': thingModule'как и должно быть.
tl; dr: мне нужно присвоить @typedef для window.thing и заставить определение jsDoc распространяться везде, где импортируется документация.И мне не нужно менять фактическое объявление window.thing
.