TypeScript 7.0 Beta: компилятор на Go в 10 раз быстрее tsc
tsgo ставится рядом с tsc без конфликтов. Разбираем: что ускоряется, какие флаги ломаются и как подготовить монорепо к миграции.
Новости Tproger21 апреля 2026 Microsoft выпустила TypeScript 7.0 Beta — компилятор, целиком переписанный с TypeScript на Go и работающий примерно в 10 раз быстрее старого tsc. Новый бинарник tsgo ставится рядом со старым компилятором, без конфликтов — пробовать в CI и редакторе можно прямо сейчас.
Перенос занял у команды TypeScript весь прошлый год. Логика проверки типов структурно идентична TypeScript 6.0, компилятор прогоняется через тестовый корпус, накопленный за десять лет, и уже работает на нескольких кодовых базах в миллионы строк — внутри Microsoft и снаружи.
Кратко
- Дата релиза: 21 апреля 2026 (Beta), стабильный релиз — в течение двух месяцев
- Скорость: ~10× быстрее TypeScript 6.0 за счёт нативного кода и параллелизма
- Установка: пакет
@typescript/native-preview@beta - Запуск:
tsgoвместоtsc, поведение совместимо - Новые флаги:
--checkers,--builders,--singleThreaded - Боевая обкатка: Bloomberg, Canva, Figma, Google, Lattice, Linear, Miro, Notion, Slack, Vanta, Vercel, VoidZero
- Сломанные флаги: target: es5, downlevelIteration, moduleResolution: node/node10, baseUrl и ещё несколько
Откуда взялись 10×
Прирост скорости складывается из двух эффектов. Первый — нативный код вместо JavaScript: парсер, чекер и эмиттер скомпилированы в машинный код Go. Второй — параллелизм: TypeScript 7.0 раскладывает парсинг, проверку типов и эмит на несколько потоков. Чем больше кодовая база — тем заметнее выигрыш.
У параллелизма есть нюанс. Парсинг и эмит файлов почти независимы и масштабируются хорошо. А вот проверка типов завязана на порядок: если запустить чекеры независимо, результаты разъедутся между запусками. Решение команды — фиксированное число воркеров-чекеров (по умолчанию 4), у которых одинаковое разделение файлов и одинаковое представление о мире.
--checkers— число type-check воркеров (по умолчанию 4).--builders— параллельная сборка проектов в монорепе.--singleThreaded— отключает параллелизм для отладки и сравнения с TS6.
Воркеры перемножаются: --checkers 4 --builders 4 — это до 16 одновременно работающих чекеров. Команда советует подбирать значения под железо: больше CPU — больше воркеров, ограниченные CI-раннеры — меньше. Учтите, что число --checkers может в редких случаях влиять на воспроизводимость результатов между прогонами; число --builders — нет.
Что ломается при переходе на TypeScript 7.0
TypeScript 7.0 принимает дефолты TypeScript 6.0 и превращает в жёсткие ошибки то, что в 6.0 было просто deprecated. Это значит: если вы ещё не перешли на TS6 с включённым stableTypeOrdering и без ignoreDeprecations — миграция на TS7 будет с правкой конфигов.
Изменения по умолчанию
strict: trueпо умолчанию.moduleпо умолчаниюesnext.target— текущая стабильная версия ECMAScript перед esnext.noUncheckedSideEffectImports: true.libReplacement: false.stableTypeOrdering: true, выключить нельзя.rootDirпо умолчанию./.typesпо умолчанию[]; старое поведение —["*"].
Самые «неожиданные» изменения — rootDir и types. Если ваш tsconfig.json лежит вне директории src, нужно явно прописать rootDir:
А пакеты типа @types/node или @types/jest теперь нужно перечислять явно:
Жёсткие ошибки вместо предупреждений
target: es5больше не поддерживается.downlevelIterationубран.moduleResolution: node / node10иclassic— рекомендуютnodenextилиbundler.module: amd, umd, systemjs, noneсняты.baseUrlубран — пути вpathsтеперь относительно корня проекта.esModuleInteropиallowSyntheticDefaultImportsнельзя ставить в false.alwaysStrictвсегда true, переключить нельзя.- Ключевое слово
moduleв namespace-объявлениях не работает. assertsна импортах заменено наwith(под import attributes из ECMAScript).- Директивы
/// <reference no-default-lib />не учитываются при включённомskipDefaultLibCheck. - Если в текущей директории есть
tsconfig.json, CLI-сборка не принимает явные пути к файлам — нужно передать флаг--ignoreConfig.
JavaScript-файлы
Поддержку JS в TS7 переработали так, чтобы анализ JSDoc-кода был ближе к анализу .ts-файлов и без специальных случаев для Closure-стиля. Часть устоявшихся паттернов специально не распознаётся и требует переписать в современный TypeScript-синтаксис: значение там, где ожидается тип, заменяется на typeof someValue; одиночный ? как тип — на any; @enum, @class, постфиксный !, присваивание prototype и closure-сигнатуры function(string): void теперь не работают. Полный список различий команда ведёт в файле CHANGES.md в репозитории компилятора.
Как поставить рядом с TS 6.0
Beta лежит в пакете @typescript/native-preview, команда — tsgo. Это сделано специально, чтобы можно было гонять TS 6.0 и TS 7.0 параллельно и сравнивать результаты в одном проекте.
Стабильный релиз 7.0 поедет в пакет typescript и будет ставиться как обычный tsc. Чтобы при этом не сломать инструменты, ожидающие старый tsc через peer dependencies, команда выпустила compat-пакет @typescript/typescript6 с бинарём tsc6. Можно прицепить его через npm-алиас:
Или в package.json:
Стабильный программный API в TS 7.0 пока недоступен — его обещают только в релизе 7.1, через несколько месяцев после стабильной 7.0 (то есть осень 2026 или позже). До этого момента tooling, который использует TypeScript-API напрямую (typescript-eslint, ts-jest, ts-loader, ts-node), будет жить на TS6 — это главный стоппер для проектов, плотно завязанных на эти инструменты.
VS Code и редакторы
Для редактора есть отдельное расширение — TypeScript Native Preview для VS Code. Оно использует тот же бинарник, что и CLI, поэтому ускорение в редакторе идёт по тем же причинам. За месяцы превью добавили auto-imports, expandable hovers, inlay hints, code lenses, go-to-source-definition и JSX linked editing. Расширение ходит через Language Server Protocol, поэтому LSP-клиенты в редакторах вроде Neovim или Zed смогут подцепить его без специальной интеграции.
Кто уже на бете
Microsoft год обкатывала pre-release версии в командах с миллионными кодовыми базами. Внешние пользователи: Bloomberg, Canva, Figma, Google, Lattice, Linear, Miro, Notion, Slack, Vanta, Vercel, VoidZero и ещё несколько. Большинство сообщает, что время сборки сокращается в разы, а редактор стал заметно отзывчивее.
FAQ
Можно ли использовать TS 7.0 Beta в продакшене?
Тип-чекер структурно идентичен TS 6.0, прогнан через тестовый корпус, накопленный за десять лет, и уже работает на миллионных кодовых базах внутри Microsoft и в Slack, Figma, Notion, Vercel, Bloomberg. Команда TypeScript явно говорит: «не пугайтесь слова beta, можно начинать работать с ней прямо в ежедневных задачах». В CI и daily-сборках — реалистично, в hot-path продакшен-сборках — на ваше усмотрение.
Что будет с TypeScript 6.0 и есть ли переход?
TS 6.0 продолжит работать. Стабильный TS 7.0 выйдет под пакетом typescript и бинарём tsc, а под TS6 останется compat-пакет @typescript/typescript6 с tsc6. Параллельная установка — поддерживается официально.
Когда выйдет стабильная версия 7.0?
По плану команды — в течение двух месяцев после Beta, то есть примерно к концу июня 2026. Перед стабильным релизом будет Release Candidate — точка, после которой остаются только критичные фиксы.
Почему Go, а не Rust?
Команда TypeScript называла это в первоначальном анонсе портирования: цель была не «переписать», а «портировать». Структура Go ближе к существующей TypeScript-кодовой базе, и это позволило перенести логику чекера 1-в-1, а не воссоздавать с нуля. Rust дал бы выше пиковую производительность, но потребовал бы рерайта, а не порта. Tproger подробно разбирал ограничения этого решения — нативный компилятор не делает скомпилированный код быстрее, только саму сборку.
Будет ли TypeScript 7 работать в браузере?
Нативный tsgo — это бинарник Go, в браузере он сам по себе не запустится. Web-инструменты (TS Playground, online-чекеры) пока остаются на TS6-сборке, скомпилированной в JS. Команда не объявляла WASM-сборку tsgo и явных планов на неё нет.
Что делать прямо сейчас
- Откройте проект, оцените реальное время сборки (
time tsc --noEmit) и редакторские задержки. - Поставьте
@typescript/native-preview@betaрядом с текущим TS6, прогонитеnpx tsgoна staging-ветке. - Если проект ещё на TS5 — сначала перейдите на TS6 с
stableTypeOrderingи безignoreDeprecations. Без этого шага миграция на TS7 будет двойной. - Проверьте конфиг на запрещённые в TS7 опции:
target: es5,baseUrl,moduleResolution: node10, AMD-модули. - В монорепо подберите
--checkersи--buildersпод количество ядер CI-раннера. - Если используете typescript-eslint или подобные инструменты — оставьте TS6 для них, TS7 только для сборки. Стабильный API появится в 7.1.
Выводы
TypeScript 7.0 Beta ускоряет сборку примерно в 10 раз без изменений в коде. Цена — пройтись по deprecated-флагам и обновиться до TS 6.0, если ещё не. Для проектов, где CI упирается в TypeScript, такая миграция окупается за неделю.
Tproger год назад писал о первых 10× на превью-сборке tsgo — тогда это были замеры одного бенчмарка. Сейчас у Microsoft рабочий бинарь, обкатанный в десятке крупных компаний.
Источники: Microsoft DevBlogs, microsoft/typescript-go, CHANGES.md.