Menu

TypeScript 7: нативный компилятор, изменения и обновление

TypeScript 7 это компилятор TypeScript, переписанный на Go как нативная программа: примерно в десять раз быстрее, с той же командой tsc и тем же языком. Что изменилось для пользователей (новые значения по умолчанию, удалённые параметры, отсутствие JavaScript API), каким инструментам ещё нужен TypeScript 6 и как обновиться.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

TypeScript 7 это компилятор TypeScript, переписанный на Go и поставляемый как нативная программа. Язык тот же, команда по-прежнему tsc, пакет npm по-прежнему typescript; меняются скорость (полная сборка примерно в десять раз быстрее), набор значений по умолчанию и удалены параметры, которые TypeScript 6 объявил устаревшими. TypeScript 7.0 вышел 8 июля 2026 года, текущая версия в npm 7.0.2.

npm install --save-dev typescript@latest
npx tsc --version
Version 7.0.2

Одно из немногих отличий, заметных на уровне типов, касается того, как шаблонные литеральные типы делят строки. JavaScript хранит строки как кодовые единицы UTF-16, и эмодзи вроде 😀 занимает две такие единицы:

TypeScript 6 делил шаблонные литеральные типы по кодовым единицам, как text[0]. TypeScript 7 делит их по кодовым точкам, как [...text], поэтому эмодзи остаётся целым:

type HeadTail<S> = S extends `${infer Head}${infer Tail}` ? [Head, Tail] : never;

type Result = HeadTail<"😀abc">;
// TypeScript 7: ["😀", "abc"]
// TypeScript 6: ["\ud83d", "\ude00abc"]

Зачем TypeScript переписали на Go

До версии 6 компилятор TypeScript сам был написан на TypeScript и работал на Node.js. На больших кодовых базах это означало медленную сборку, медленный запуск редактора и большой расход памяти.

Андерс Хейлсберг объявил о нативном порте 11 марта 2025 года в посте «A 10x Faster TypeScript». Новая кодовая база получила кодовое имя Corsa, а старая на JavaScript Strada. Команда перенесла код существующего компилятора, а не проектировала проверку типов заново, поэтому новый компилятор следует тем же правилам и сообщает те же ошибки. TypeScript 6.0 (март 2026 года) стал последним выпуском кодовой базы на JavaScript и послужил мостом: в нём объявлено устаревшим всё, что TypeScript 7 удалит. TypeScript 7.0 вышел 8 июля 2026 года.

Насколько быстрее TypeScript 7

Полные сборки проектов с открытым кодом, опубликованные вместе с выпуском 7.0:

ПроектTypeScript 6TypeScript 7УскорениеПамять
VS Code125,7 с10,6 с11,9xс 5,2 ГБ до 4,2 ГБ
Sentry139,8 с15,7 с8,9xс 4,9 ГБ до 4,6 ГБ
Bluesky24,3 с2,8 с8,7xс 1,8 ГБ до 1,3 ГБ
Playwright12,8 с1,47 с8,7xс 1,0 ГБ до 0,9 ГБ
tldraw11,2 с1,46 с7,7xс 0,6 ГБ до 0,5 ГБ

В этих запусках использовались 4 потока проверки типов по умолчанию. С --checkers 8 на той же машине сборка VS Code заняла 7,51 с (16,7x), а tldraw 1,06 с (10,6x), ценой большего расхода памяти.

Редактор выигрывает не меньше. Языковой сервис теперь работает как нативный языковой сервер: в кодовой базе VS Code время от открытия редактора до появления первой ошибки в файле сократилось примерно с 17,5 секунды до менее чем 1,3 секунды. Ускорение важнее всего для монорепозиториев, конвейеров CI и редакторов на больших кодовых базах.

Что осталось прежним

  • Команда и пакет. npm install --save-dev typescript и npx tsc. При установке npm выбирает готовый бинарный файл для вашей платформы из необязательных зависимостей вроде @typescript/typescript-linux-x64, так что больше ничего настраивать не нужно.
  • Язык. Тот же синтаксис, та же система типов, те же коды ошибок.
  • Результаты. В примечаниях к выпуску сказано, что практически любой код, который чисто компилируется в TypeScript 6.0 с включённым флагом stableTypeOrdering и без настройки ignoreDeprecations, должен так же компилироваться в TypeScript 7.0.

Новые значения по умолчанию

TypeScript 6.0 изменил эти значения по умолчанию, и TypeScript 7 их сохраняет. Они важны только для параметров, которые не задаёт ваш tsconfig.json:

ПараметрНовое значение по умолчаниюПоследствия, если вы полагались на старое
stricttrueПроекты, которые никогда не задавали strict, теперь получают строгие проверки null, noImplicitAny и остальное
targetes2025, самая новая версия перед esnextВывод сохраняет современный синтаксис, если не задать более старую цель
moduleesnextВывод в модулях ES, если не задать nodenext или commonjs
types[]Установленные пакеты @types больше не загружаются автоматически: добавьте "types": ["node"] (["*"] возвращает старое поведение)
rootDir./, папка с tsconfig.jsonПри заданном outDir и исходниках в src будет error TS5011, пока вы не зададите "rootDir": "./src"
noUncheckedSideEffectImportstrueИмпорту ради побочного эффекта вроде import "./styles.css" нужно объявление модуля (declare module "*.css";), которое обычно дают пакеты типов фреймворка
stableTypeOrderingВсегда включён, выключить нельзяТипы упорядочиваются одинаково при каждом запуске, поэтому сообщения об ошибках и вывод .d.ts не зависят от порядка проверки

Удалённые параметры и синтаксис

Параметры, объявленные устаревшими в TypeScript 6, в TypeScript 7 являются ошибками:

  • target: es5 и downlevelIteration, который существовал только для вывода в ES5.
  • moduleResolution: node (он же node10) и classic. Используйте nodenext или bundler.
  • module: amd, umd, system и none.
  • baseUrl (пишите paths относительно файла tsconfig) и outFile (используйте бандлер).
  • esModuleInterop: false, allowSyntheticDefaultImports: false и alwaysStrict: false; все три всегда включены.

Компилятор точно говорит, что удалить:

error TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration.
error TS5108: Option 'moduleResolution=node10' has been removed. Please remove it from your configuration.

Две старые синтаксические формы тоже стали ошибками: module Foo { } для пространства имён (пишите namespace Foo { }; declare module "foo" для пакета это не затрагивает) и утверждения импорта (assert { type: "json" } превращается в with { type: "json" }).

index.ts(2,8): error TS1540: A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.

Замена module на namespace во второй строке исправляет ошибку, и программа печатает 4.

В командной строке tsc file.ts в папке с tsconfig.json теперь останавливается с error TS5112, а не молча игнорирует конфигурацию. Запускайте просто tsc или передайте --ignoreConfig. В файлах JavaScript, проверяемых через JSDoc, TypeScript 7 читает типы ближе к тому, как это делает TypeScript: @enum больше не распознаётся, а значению, используемому как тип, нужен typeof. Замена для каждого удалённого параметра показана на странице о tsconfig.

Инструменты, которым ещё нужен TypeScript 6

В TypeScript 7.0 нет стабильного JavaScript API. require("typescript") возвращает только информацию о версии (version и versionMajorMinor), а функций компилятора, которые вызывают другие инструменты (createProgram, языковой сервис), там нет; точки входа пакета typescript/unstable/* экспериментальные и заменой не являются. В примечаниях к выпуску сказано, что команда ожидает новый, другой API в TypeScript 7.1. До тех пор всё, что импортирует компилятор как библиотеку, продолжает использовать TypeScript 6:

  • typescript-eslint (правила линтера с учётом типов)
  • Языковые инструменты для файлов Vue, Svelte и Astro, проверка типов в шаблонах Angular и MDX
  • ts-node, который падает при запуске, если установлен TypeScript 7

Для них TypeScript поставляет пакет совместимости @typescript/typescript6, который устанавливает TypeScript 6 с полным API и командой tsc6. С псевдонимами npm в одном проекте можно держать оба: TypeScript 7 выполняет сборку, а инструменты, которые импортируют typescript, получают версию 6.

{
    "devDependencies": {
        "@typescript/native": "npm:typescript@^7.0.2",
        "typescript": "npm:@typescript/typescript6@^6.0.2"
    }
}

После npm install:

$ npx tsc --version
Version 7.0.2
$ npx tsc6 --version
Version 6.0.3

Если вы не используете ни один из этих инструментов, установите обычный typescript и пропустите этот раздел.

Новые параметры командной строки

Нативный компилятор разбирает, проверяет и генерирует код параллельно. Этим управляют три новых флага, и примечания к выпуску называют --checkers и --builders экспериментальными:

ФлагЧто делает
--checkers NЧисло потоков проверки типов на проект (по умолчанию 4). Больше может помочь на машинах с большим числом ядер и стоит памяти; меньше подходит для небольших раннеров CI.
--builders NЧисло проектов, собираемых одновременно при --build со ссылками на проекты. Умножается на --checkers: 4 сборщика с 4 потоками проверки могут запустить 16 потоков одновременно.
--singleThreadedОтключает весь параллелизм, для отладки или при жёстких ограничениях памяти.

--watch тоже переписан, на порте на Go наблюдателя за файлами из бандлера Parcel.

Поддержка в редакторах

Для VS Code команда TypeScript публикует отдельное расширение TypeScript 7; после установки оно становится основным, а команда «Disable TypeScript 7 Language Server» в палитре команд возвращает TypeScript 6. Последняя версия Visual Studio включает TypeScript 7 автоматически в зависимости от рабочей области, а другие редакторы (Neovim, Zed, Sublime Text, Emacs) подключаются к нему через Language Server Protocol. Проекты с файлами Vue, Svelte, Astro или MDX либо с шаблонами Angular сохраняют поддержку редактора на основе TypeScript 6, пока TypeScript 7 не предоставит API, которым эти инструменты смогут пользоваться. Проект на Angular всё равно может запускать tsc из TypeScript 7 для быстрой проверки всего проекта.

Как обновиться до TypeScript 7

  1. Сначала обновитесь до TypeScript 6, если вы на 5.x: npm install --save-dev typescript@6. Исправьте каждую ошибку об устаревании, а не заглушайте её через "ignoreDeprecations": "6.0".
  2. Включите "stableTypeOrdering": true в TypeScript 6 и исправьте всё, что это меняет. Именно для такой конфигурации команда обещает одинаковую компиляцию в 7.
  3. Задайте параметры, у которых изменились значения по умолчанию, если вы зависели от старых, например "types": ["node"] и "rootDir": "./src".
  4. Установите TypeScript 7: npm install --save-dev typescript@latest. После этого stableTypeOrdering можно удалить; в 7 он всегда включён.
  5. Проверьте инструменты. Если вы используете typescript-eslint, ts-node или фреймворк с проверкой типов в шаблонах, настройте показанный выше псевдоним TypeScript 6.
  6. Проверьте версию через npx tsc --version и убедитесь, что CI устанавливает зависимости из обновлённого lock-файла.

tsgo и предварительные сборки

До выпуска нативный компилятор публиковался как @typescript/native-preview с командой tsgo, чтобы его можно было попробовать рядом с tsc на JavaScript. Статьи 2025 и начала 2026 года упоминают tsgo. С версией 7.0 это имя ушло из повседневного использования: нативный компилятор называется tsc, а его ночные сборки публикуются как typescript@next (сейчас это версии разработки 7.1).

Часто задаваемые вопросы

Что такое TypeScript 7?

TypeScript 7 это первый выпуск компилятора TypeScript, переписанного на Go и скомпилированного в нативную программу, вместо запуска в виде JavaScript на Node.js. Он проверяет тот же язык той же командой tsc, а по данным примечаний к выпуску полная сборка обычно от 8 до 12 раз быстрее, чем в TypeScript 6. Выпущен 8 июля 2026 года.

TypeScript 7 написан на Go?

Да. Компилятор и языковой сервис перенесены с TypeScript на Go (кодовое имя проекта Corsa, а кодовой базы на JavaScript Strada). Устанавливается он по-прежнему из npm как пакет typescript; npm выбирает готовый нативный бинарный файл для вашей операционной системы и процессора.

Нужно ли менять код для TypeScript 7?

Код обычно нет, конфигурацию иногда да. TypeScript 7 удаляет параметры, которые 6.0 объявил устаревшими (target: es5, moduleResolution: node, baseUrl, outFile и другие), и меняет значения по умолчанию, например strict: true и types: []. Код, который чисто компилируется в TypeScript 6.0 с включённым stableTypeOrdering и без ignoreDeprecations, должен компилироваться так же.

Что такое tsgo?

tsgo это имя команды в предварительных сборках нативного компилятора, которые публиковались как пакет npm @typescript/native-preview до выпуска 7.0. В TypeScript 7 нативный компилятор это просто tsc в пакете typescript, а ночные сборки берутся из typescript@next.

Работает ли typescript-eslint с TypeScript 7?

Напрямую нет. В TypeScript 7.0 нет стабильного JavaScript API, а такие инструменты, как typescript-eslint, ts-node и проверки шаблонов Vue, Svelte и Angular, вызывают этот API. Оставьте для них TypeScript 6 через пакет @typescript/typescript6 (псевдоним npm), а для сборок используйте tsc из TypeScript 7. Команда TypeScript ожидает, что в TypeScript 7.1 появится новый, другой API.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ