Microsoft опубликовала Release Candidate TypeScript 7.0 — версии, в которой компилятор целиком переписан на Go. Проект больше года был известен под кодовым именем Corsa и жил отдельным пакетом; теперь он въезжает в основную линейку и получает номер 7.0. Поставить RC можно уже сейчас: npm install -D typescript@rc.
Главная цифра, которую называет команда, — компилятор «часто примерно в 10 раз быстрее» TypeScript 6.0. Достигается это не микрооптимизациями, а тем, что Go позволил распараллелить то, что в JavaScript-версии выполнялось последовательно: разбор файлов, проверку типов и генерацию кода. Управление параллелизмом вынесено в новые флаги — --checkers задаёт количество воркеров проверки типов (по умолчанию 4), --builders отвечает за параллельную сборку проектов, а --singleThreaded возвращает старое однопоточное поведение, если параллелизм ломает вашу сборку.
Важный нюанс: 7.0 — это порт, а не переписывание с нуля. Семантика проверки типов сохранена, то есть код, который компилировался на 6.0, должен компилироваться и на 7.0 с теми же ошибками. Ломается не типизация, а конфигурация. В 7.0 по умолчанию включён strict, module теперь esnext, rootDir — ./, а types по умолчанию пустой массив вместо автоматического подтягивания всех @types из node_modules. Из компилятора вырезали таргет ES5, downlevelIteration, модульные системы AMD, UMD и SystemJS, а также baseUrl.
Отдельная история — экосистема инструментов. Стабильного программного API в 7.0 не будет: команда обещает его только в 7.1. Всё, что дёргает компилятор через API — кастомные трансформеры, часть линтеров, ts-node-подобные раннеры, — на RC может не работать. Чтобы не оставлять такие проекты без выхода, выпущен пакет @typescript/typescript6, который позволяет держать старый и новый компиляторы рядом. GA-релиз Microsoft обещает примерно через месяц после RC.
Что делать сейчас. Не переключайте прод одним коммитом. Поставьте typescript@rc в отдельную ветку и прогоните tsc --noEmit на CI, замерив время до и после — если у вас монорепа на сотни тысяч строк, разница будет самой убедительной метрикой для тимлида. Затем откройте tsconfig.json и найдите то, что удалили: "target": "es5", downlevelIteration, baseUrl с алиасами путей (их надо переносить на paths относительно самого tsconfig или на imports в package.json), модули AMD/UMD. Отдельно проверьте, что после смены дефолта types: [] у вас не отвалились глобальные типы вроде @types/node — их теперь нужно перечислять явно. Инструменты, завязанные на TS API, до 7.1 держите на 6.0 через @typescript/typescript6.
Комментарии