Ответ вслух Senior tsconfig и декларации обновлено

Медленный tsc в большом проекте

Вопрос

Проверка типов в монорепо идёт 4 минуты, IDE тормозит. Как будете искать причину и ускорять?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Начинаю с измерения: tsc --extendedDiagnostics покажет время на парсинг, связывание и проверку, число файлов и инстанцирований типов, а --generateTrace даст трейс, по которому видно конкретные тяжёлые типы и файлы.

Что должно прозвучать в ответе

  • Измерить: `tsc --extendedDiagnostics`, `--generateTrace` и анализ трейса

  • Разбить на project references и собирать `tsc -b` с инкрементальностью, кешировать `.tsbuildinfo` в CI

  • Явные типы возврата у публичных функций, `isolatedDeclarations` для параллельной генерации деклараций

  • Упростить тяжёлые типы: огромные union, глубокая рекурсия, пересечения вместо `extends` у интерфейсов

  • `skipLibCheck`, сужение `include`, отказ от лишних `@types`

Что могут спросить следом

  • Что показывает generateTrace?
  • Почему интерфейсы с extends проверяются быстрее пересечений?
  • Что делать с IDE, если CLI уже быстрый?

Разбор

Начинаю с измерения: tsc --extendedDiagnostics покажет время на парсинг, связывание и проверку, число файлов и инстанцирований типов, а --generateTrace даст трейс, по которому видно конкретные тяжёлые типы и файлы. Дальше архитектура: project references, чтобы проверять пакет против .d.ts зависимостей, а не их исходников, и tsc -b с инкрементальной сборкой, причём .tsbuildinfo стоит кешировать в CI. Явные типы возврата у экспортов уменьшают работу по выводу, а isolatedDeclarations позволяет строить декларации параллельно быстрыми инструментами. Точечно: огромные union из шаблонных литералов, глубоко рекурсивные типы, сложные пересечения (интерфейсы с extends кешируются лучше). Плюс гигиена: skipLibCheck, аккуратные include и types. Для IDE помогает то же самое, плюс разбиение на проекты, чтобы tsserver не держал всё сразу.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме