Это предполагаемое поведение?
Да.
Можно ли это где-то включить?
Нет, трансформаторы имеют ограниченное назначение.Общие универсальные «плагины» для компилятора не поддерживаются.
Трансформаторы запускаются как часть фазы «emit», которая генерирует код JavaScript из проверенного типа AST.
Этот комментарий в PR-преобразователе гласит:
Все преобразования происходят после фазы проверки
ОБНОВЛЕНИЕ
есть ли способ компилировать дважды: один раз для преобразования файла и один раз для проверки всего типа?Я не против, если мне придется выполнить отдельную проверку для преобразованных файлов.
Я не знаю.Первое, что нужно попробовать, это сделать так, чтобы ваши преобразователи модифицировали AST, как и раньше, а затем проверить тип измененных файлов вручную, вызвав
program.getDiagnosticsProducingTypeChecker().getDiagnostics(sourceFile)
(getDiagnostics
имеет второй параметр - cancellationToken
- но кажется, что этоего можно опустить, потому что он всегда проверяется на соответствие undefined
в коде проверки типов. В общем, вы можете посмотреть, как различные API-интерфейсы компилятора используются в его собственном исходном коде, например, emit
действительно печатает-проверка сначала путем вызова различных program.getNNNDiagnostics
, затем запускает эмиттер с преобразованиями.)
Это может работать или не работать, потому что средство проверки типов изменяет AST, и это зависит от того, находится ли AST в правильном состоянии.
Затем вы можете захотеть взглянуть на API Builder - его цель - следить за изменениями исходного файла и перекомпилировать измененные файлы ( ссылка на исходный код ).Я не знаю, насколько сложно было бы перекомпилировать его при изменениях AST, также похоже, что вы не сможете использовать посетителей, доступных в трансформерах;вам придется обходить AST вручную.
Кроме того, есть библиотека ts-simple-ast , заявленная цель которой - «Предоставить простой способ навигации и манипулирования кодами JavaScript и JavaScript».,Я сам этим не пользовался и понятия не имею, насколько это полезно для вашей цели.