TypeScript 7.0: почему компилятор переписали на Go и что это дает
8 июля 2026 года команда разработки Microsoft анонсировала выпуск новой мажорной версии TypeScript 7.0. Это событие знаменует собой начало новой эпохи в инфраструктуре веб-разработки: компилятор популярного языка статического анализа был полностью переписан с TypeScript/JavaScript на системный язык Go. Релиз ориентирован прежде всего на радикальное ускорение процессов сборки и уменьшение времени ожидания обратной связи при написании кода. Разработчики получили прирост производительности компиляции (full builds) в 8–12 раз, а также снижение потребления оперативной памяти на 6–26%. TypeScript 7.0 представляет многопоточный тайп-чекинг, переработанный режим отслеживания файлов и строгий переход к новым стандартам конфигурации.
Почему Go: преодоление барьеров JavaScript Runtime
Исторически компилятор TypeScript (tsc) был написан на самом TypeScript и выполнялся поверх виртуальной машины JavaScript (V8 в Node.js). Для больших кодовых баз и монорепозиториев это накладывало жесткие ограничения:
- Однопоточность. JavaScript по умолчанию выполняет код в один поток. Хотя Node.js поддерживает Worker Threads, их использование для компилятора сопряжено с большим расходами на копирование данных между изолированными кучами (heaps).
- Управление памятью (Garbage Collection). Процесс статического анализа типов создает миллионы мелких объектов в памяти. Постоянная работа сборщика мусора в JS-среде приводила к частым задержкам и блокировкам Event Loop в тяжелых вычислительных задачах.
- Нативная скорость. Компиляция на языке Go выполняется напрямую в машинный код. Go предоставляет дешевую многопоточность с разделяемой памятью (goroutines) и оптимизированную работу с кучей, что делает его идеальным выбором для задач обхода сложных графов типов.
Microsoft подчеркивает, что портирование компилятора велось максимально строго: разработчики сохранили оригинальную структуру и логику старой кодовой базы, чтобы гарантировать полную идентичность результатов компиляции между старыми JS-версиями и новым нативным компилятором на Go.
Показатели производительности на реальных проектах
В официальном анонсе Announcing TypeScript 7.0 приведены результаты сравнительного тестирования компиляции крупных открытых проектов на версиях TypeScript 6 и 7.
Скорость полной сборки проектов (Full Build Speed):
- VS Code: время сборки сократилось со 125.7 с до 10.6 с (ускорение в 11.9 раза).
- Sentry: со 139.8 с до 15.7 с (ускорение в 8.9 раза).
- Bluesky: с 24.3 с до 2.8 с (ускорение в 8.7 раза).
- Playwright: с 12.8 с до 1.47 с (ускорение в 8.7 раза).
- Tldraw: с 11.2 с до 1.46 с (ускорение в 7.7 раза).
Потребление оперативной памяти (Memory Usage):
- VS Code: снизилось с 5.2 GB до 4.2 GB (на 18%).
- Sentry: с 4.9 GB до 4.6 GB (на 6%).
- Bluesky: с 1.8 GB до 1.3 GB (на 26%).
- Playwright: с 1.0 GB до 0.9 GB (на 11%).
- Tldraw: с 0.6 GB до 0.5 GB (на 15%).
Помимо сборки, существенно ускорилась работа редактора в реальном времени. В кодовой базе VS Code вывод первой ошибки диагностики при открытии файла сократился с 17.5 секунд до 1.3 секунд (улучшение в 13 раз). В компании Slack интеграция TypeScript 7.0 позволила сократить время проверки типов в CI с 7.5 минут до 1.25 минут, исключив до 40% задержек в очереди слияния (merge queue). В Microsoft News Services внедрение новой версии сэкономило разработчикам в общей сложности до 400 часов ожидания сборок CI в месяц. Наконец, в Canva время до вывода первой ошибки в редакторе снизилось с 58 до 4.8 секунд.
Механизмы многопоточности и управления ресурсами
В новой архитектуре компилятора реализована полноценная параллелизация фаз парсинга кода, проверки типов и записи готовых файлов. Для управления производительностью добавлены новые флаги командной строки:
--checkers <число>— задает количество параллельных воркеров для проверки типов (по умолчанию используется 4 воркера). При увеличении этого значения на многоядерных процессорах можно добиться еще большей скорости сборки, но вырастет и потребление памяти. Например, при установке--checkers 8время сборки VS Code падает до 7.51 с (ускорение в 16.7 раза по сравнению с TS 6), а Sentry — до 12.08 с (ускорение в 11.6 раза).--builders <число>— управляет количеством параллельных сборщиков ссылок проектов при сборке монорепозиториев через ключ--build. Стоит учитывать мультипликативный эффект: одновременный запуск--builders 4и--checkers 4может породить до 16 параллельных процессов проверки типов, что может перегрузить систему.--singleThreaded— полностью отключает параллелизацию. Этот режим полезен для отладки, сравнения работы компилятора, работы в облачных средах с ограниченными ресурсами процессора или при внешней оркестрации сборки.
Разработчики также переписали режим отслеживания изменений --watch. Раньше Go-компилятор тратил много ресурсов на периодический опрос (polling) файлов зависимостей в больших проектах. Команда Microsoft интегрировала в Go-код архитектурные принципы быстрого файлового наблюдателя из сборщика Parcel, что позволило отказаться от тяжелого C++ инструментария и повысить кроссплатформенную стабильность работы с файловой системой.
Совместимость с TypeScript 6.0 и особенности миграции
Новая версия TypeScript 7.0 стремится сохранить полную совместимость со стандартами разметки типов и флагами командной строки TypeScript 6.0. Чтобы облегчить переход, разработчикам рекомендуется сначала обновить свои проекты до версии 6.0 и исправить все предупреждения. В версии 7.0 все устаревшие конфигурационные параметры вызывают фатальные ошибки компиляции (hard errors).
В TypeScript 7.0 прекращена поддержка следующих флагов и режимов:
- Выходной формат
target: es5и опцияdownlevelIteration. - Устаревшие типы разрешения модулей
node/node10иclassic. - Поддержка старых форматов модулей
amd,umd,systemjsиnone. - Параметры конфигурации
baseUrl, отключениеesModuleInteropиallowSyntheticDefaultImports. - Использование ключевого слова
assertв импортах (теперь обязательноwith).
Важнейшее ограничение версии 7.0 — отсутствие стабильного программного API (Programmatic API). Создание стабильного программного интерфейса для интеграции компилятора Go в сторонние инструменты планируется в версии TypeScript 7.1.
Это означает, что сложные экосистемные инструменты, требующие глубокой интеграции с компилятором — такие как линтеры (typescript-eslint), шаблонизаторы Vue (vue-tsc), Astro, Svelte, MDX или компилятор шаблонов Angular — не смогут сразу использовать нативный компилятор TypeScript 7.0 и временно останутся на кодовой базе версии 6.0.
Для решения этой проблемы Microsoft позволяет запускать TypeScript 7 параллельно с TypeScript 6. Для этого выпущен специальный пакет обратной совместимости @typescript/typescript6, который предоставляет исполняемый файл tsc6 и программное API версии 6.0. Установка выполняется через npm-псевдонимы:
npm install -D typescript@npm:@typescript/typescript6
Проект может использовать CLI-компилятор tsc версии 7.0 для быстрых общих проверок и одновременно обращаться к tsc6 для специфических сборок шаблонов.
Новое поведение типов и различия при обработке JavaScript
TypeScript 7.0 принес несколько изменений в логике вывода типов и анализа JavaScript:
- Строгое соответствие Unicode в шаблонных литералах. Ранее при выделении частей из строк вида
"😀abc"компилятор ориентировался на суррогатные пары UTF-16, что приводило к разделению смайлика на некорректные половины. В версии 7.0 типы шаблонных литералов работают на уровне кодовых точек Unicode, корректно выделяя символ"😀". - Унификация JSDoc-анализа для JavaScript. Логика работы с JS-файлами была приближена к правилам строгого TypeScript. В частности, значения больше нельзя использовать на месте типов без ключевого слова
typeof, поддержка устаревших аннотаций@enum,@class(для создания конструкторов функций) и постфиксного восклицательного знака!была прекращена, а одиночный тип?заменен на стандартныйany.
Релиз TypeScript 7.0 — это важнейший шаг по переходу веб-инструментов на нативные технологии сборки. Проекты, ориентированные на командную строку и стандартный запуск сборщика, могут выполнять миграцию уже сегодня для получения мгновенного прироста скорости в CI и редакторе. Инструментам, зависящим от программного API, стоит дождаться выпуска TypeScript 7.1 с готовой поддержкой внешних интеграций.

