Мигрировали 200K строк JS → TS. Вот что пошло не так.
Год работы. Три разработчика. 200 тысяч строк кода.
Мы начали уверенно: "включим strict mode, пробежимся ts-migrate, готово". Через 3 месяца — 4 000 ошибок типизации и никто не хочет их трогать.
Что сломалось:
1. Мигрировали слой за слоем, а не домен за доменом. Типы останавливались на границе модуля — дальше шли any. К концу проекта 34% файлов всё ещё использовали any как "временное решение".
2. Недооценили динамический код. У нас был Event Bus с 80+ типами событий. В JS это работало на строках. В TS — это оказалось 6 недель отдельного проекта.
3. Не заморозили фичи. Пока команда мигрировала, продуктовые задачи продолжали пушить новый JS-код. За 6 месяцев — ещё 30K строк в очереди.
Что сработало:
Разделили на два прохода. Первый: "запустить компилятор без ошибок" — даже если 80% кода было с as unknown as Type. Второй, через 2 месяца: убрать все грязные касты по одному домену за раз.
Итог: миграция заняла 14 месяцев вместо планируемых 6. Баги в проде сократились на 40% в первые 3 месяца после. Ни один разработчик не хочет возвращаться к чистому JS.
Стоило ли это года? Да. Сделали бы по-другому? Тоже да.
Вы мигрировали JS → TS в большом проекте? Что стало главным сюрпризом?