Решён
Где найти документацию по TypeScript Compiler API?

НочнойКодер TypeScript
182
4

Пытаюсь написать кастомный трансформер для TypeScript, который на этапе компиляции будет модифицировать AST. Конкретно - хочу добавлять декораторы к определенным классам автоматически.

Проблема в том что документация по Compiler API официально практически отсутствует. На typescriptlang.org про это почти ничего нет. Нашел какую то wiki на GitHub, но она явно устаревшая (примеры для TS 2.x, сейчас 5.x).

Использую: TypeScript 5.4, Node.js 20, трансформер планирую подключать через ts-patch или ttypescript.

Какие есть источники по Compiler API кроме чтения исходников самого tsc?

Решение
38
Эксперт • 1 ответ

Честно - нормальной документации нет, это открытая боль всего сообщества. Команда TS намеренно не документирует Compiler API, считая его внутренним инструментом.

Что реально работает:

ts-morph - обертка над Compiler API с нормальной документацией. Если не принципиально работать с голым API, ts-morph закрывает 90% задач по трансформации AST. Документация на сайте ts-morph.com актуальная.

TypeScript AST Viewer (ts-ast-viewer.com) - незаменимый инструмент. Вставляешь код, видишь дерево, кликаешь на ноду и видишь точный путь к ней через API.

Исходники известных трансформеров - типа ts-transformer-keys, typia, nestjs декораторный механизм. Реальные рабочие примеры под свежие версии TS.

Канал basarat на YouTube - там есть несколько видео по Compiler API, хоть и не самые свежие, принципы не изменились.

Про ttypescript - он deprecated, лучше сразу на ts-patch переходить если еще не перешел.

Аватар НочнойКодер

ts-ast-viewer - вот это реально не знал, очень удобно. Спасибо за про ttypescript тоже, как раз хотел его использовать.

15
Участник • 2 ответа

Еще добавлю: репозиторий microsoft/TypeScript на GitHub содержит папку src/services и тесты в tests/cases/compiler. По тестам очень хорошо понятно как команда сама использует API. Плюс issues на GitHub - там разработчики иногда отвечают на вопросы по Compiler API с примерами кода.

9
Эксперт • 2 ответа

Книга "TypeScript Deep Dive" от basarat (доступна бесплатно онлайн) содержит главу по Compiler API. Она написана под старые версии, но концепции Visit, Transform, программный вызов tsc там объяснены достаточно внятно для старта.

2
Участник • 3 ответа

Вопрос не по теме но - зачем трансформер на этапе компиляции если можно те же декораторы добавить через eslint плагин или просто кодогенерацию? Кажется что задача XY.

Аватар НочнойКодер

Кодогенерация не подходит - нужно чтобы декораторы добавлялись динамически по условию из конфига сборки, не на уровне исходников. Это именно задача для трансформера.

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.