Всем привет.
Возникла идея, работоспособность которой я пока не могу оценить. Поиск затрудняется тем, что по приходящим мне в голову ключевым словам отдаётся не то, чего я ожидаю.
Итак — можно ли "расширить" typescript при помощи custom loader?
Я так понял, что сама по себе идея лоадеров существует и работает, но в мире JavaScript. Типа мы берём файл на
каком-то языке, и при помощи лоадера магически на лету превращаем его в JavaScript.
В частности, для ноды существует ts-node — лоадер, который транспилирует TypeScript в ECMAScript на лету, вместо статической транспиляции при помощи tsc.
Есть ряд лоадеров для всяческой экзотики — например, затаскивания .css в javascript.
Но вот чего я пока так и не смог понять — так это есть ли возможность сделать что-то подобное для
тайпскрипта.
То есть допустим, у меня есть файл на некотором языке. И у меня есть рецепт, как по этому файлу получить typescript, который содержит не только исполняемый код, но и определения типов и прочие полезные для typescript вещи.
Можно реализовать этот рецепт в виде инструмента, который вызывается в процессе сборки пакета.
То есть примерно так:
1. Генерируем из .wtf файлов некие .ts (или пары из .js и .d.ts)
2. Собираем получившийся проект, в который входят как честные .ts исходники, так и сгенерированные на шаге 1
3. PROFIT!
Пример такого подхода можно увидеть в
https://ohmjs.org/ — там как раз есть compile-time инструмент, который по .ohm-файлам грамматики порождает .js и .d.ts, и позволяет статически верифицировать корректность кода семантического анализа, зависящего от синтаксического разбора нашей грамматикой.
Недостаток этого подхода — в том, что изменения в .wtf (.ohm) не видны в IDE вплоть до явного запуска внешнего инструмента. А также в том, что возможные ошибки диагностируются в порождённом коде, а не в исходном.
Понятно, что можно попытаться это обойти — например, запуском инструмента в режиме мониторинга файлухи, и оперативного перестраивания зависимостей без явного вызова билд-скриптов.
Но это — некоторый паллиатив.
Хочется как раз как-то объяснить тайпскрипту (в том числе и тому, который исполняется внутри IDE Extension), что .ohm — это просто такой очень специальный .ts, который надо читать не напрямую, а через лоадер.
И вот пока что я не могу понять, существует ли такая возможность, или нет?