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 6 | TypeScript 7 | Ускорение | Память |
|---|---|---|---|---|
| VS Code | 125,7 с | 10,6 с | 11,9x | с 5,2 ГБ до 4,2 ГБ |
| Sentry | 139,8 с | 15,7 с | 8,9x | с 4,9 ГБ до 4,6 ГБ |
| Bluesky | 24,3 с | 2,8 с | 8,7x | с 1,8 ГБ до 1,3 ГБ |
| Playwright | 12,8 с | 1,47 с | 8,7x | с 1,0 ГБ до 0,9 ГБ |
| tldraw | 11,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:
| Параметр | Новое значение по умолчанию | Последствия, если вы полагались на старое |
|---|---|---|
strict | true | Проекты, которые никогда не задавали strict, теперь получают строгие проверки null, noImplicitAny и остальное |
target | es2025, самая новая версия перед esnext | Вывод сохраняет современный синтаксис, если не задать более старую цель |
module | esnext | Вывод в модулях ES, если не задать nodenext или commonjs |
types | [] | Установленные пакеты @types больше не загружаются автоматически: добавьте "types": ["node"] (["*"] возвращает старое поведение) |
rootDir | ./, папка с tsconfig.json | При заданном outDir и исходниках в src будет error TS5011, пока вы не зададите "rootDir": "./src" |
noUncheckedSideEffectImports | true | Импорту ради побочного эффекта вроде 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
- Сначала обновитесь до TypeScript 6, если вы на 5.x:
npm install --save-dev typescript@6. Исправьте каждую ошибку об устаревании, а не заглушайте её через"ignoreDeprecations": "6.0". - Включите
"stableTypeOrdering": trueв TypeScript 6 и исправьте всё, что это меняет. Именно для такой конфигурации команда обещает одинаковую компиляцию в 7. - Задайте параметры, у которых изменились значения по умолчанию, если вы зависели от старых, например
"types": ["node"]и"rootDir": "./src". - Установите TypeScript 7:
npm install --save-dev typescript@latest. После этогоstableTypeOrderingможно удалить; в 7 он всегда включён. - Проверьте инструменты. Если вы используете typescript-eslint, ts-node или фреймворк с проверкой типов в шаблонах, настройте показанный выше псевдоним TypeScript 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.