Custom Loader for Typescript
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.01.25 10:57
Оценка:
Всем привет.
Возникла идея, работоспособность которой я пока не могу оценить. Поиск затрудняется тем, что по приходящим мне в голову ключевым словам отдаётся не то, чего я ожидаю.

Итак — можно ли "расширить" 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, который надо читать не напрямую, а через лоадер.

И вот пока что я не могу понять, существует ли такая возможность, или нет?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.