Что нового в TypeScript 6.0
TypeScript 6.0 — это не типичный релиз с новыми возможностями. Если вы ожидаете новый синтаксис или кардинальные изменения в системе типов, вас ждёт сюрприз. Этот релиз в первую очередь направлен на модернизацию настроек по умолчанию, удаление устаревшего багажа и подготовку экосистемы к TypeScript 7.0 — предстоящему нативному порту компилятора и инструментов на Go. Понимание того, что изменилось и почему, сэкономит вам часы отладки после обновления.
Ключевые моменты
- TypeScript 6.0 — это переходный релиз, последняя версия, построенная на компиляторе на базе JavaScript, предназначенная для очистки настроек по умолчанию и устаревших функций перед выходом нативной линейки TypeScript 7.0.
- Изменились несколько настроек компилятора по умолчанию, включая
strict: true,module: "esnext", плавающийtarget, который в настоящее время разрешается вes2025,types: []иnoUncheckedSideEffectImports: true. Это может вызвать ошибки сборки, если ваш tsconfig полагался на неявное поведение. - Новые платформенные возможности включают таргет
es2025, типы для Temporal API,RegExp.escape,Map.getOrInsertи консолидированные записи DOM-библиотек. - Множество устаревших опций, таких как
--moduleResolution node(старое поведениеnode10),--target es5и старые форматы модулей, объявлены устаревшими для перехода на TypeScript 7.0. Исправьте их сейчас, чтобы избежать болезненной миграции позже.
TypeScript 6.0 — переходный релиз, а не набор новых функций
TypeScript 6.0 намеренно позиционируется как последняя версия, построенная на кодовой базе JavaScript. Ожидается, что TypeScript 7.0 станет нативным преемником на базе Go с гораздо более быстрой сборкой и производительностью редактора. TypeScript 6.0 очищает фундамент перед этим переходом.
Практическое следствие: большинство изменений в TypeScript 6.0 касаются настроек конфигурации по умолчанию и устаревших функций, а не новых возможностей языка. Если в вашем проекте накопились устаревшие опции tsconfig, сейчас самое время их исправить.
Что нового в TypeScript 6.0: возможности выравнивания с платформой
Несмотря на фокус на переходе, TypeScript 6.0 всё же добавляет значимую поддержку современных JavaScript API.
Таргет ES2025 и новые встроенные типы
TypeScript 6.0 добавляет es2025 как допустимое значение для --target и --lib. Это включает встроенные типы для API вроде RegExp.escape, а также переносит некоторые декларации из esnext в es2025.
Также добавлены встроенные типы для новых API, которые всё ещё доступны через esnext:
RegExp.escape— безопасно экранирует специальные символы регулярных выражений в строкеTemporalAPI — современная замена дляDate, типизированная подesnextилиtemporal.esnextMap.getOrInsertиMap.getOrInsertComputed— более чистые паттерны upsert дляMapиWeakMap, доступные черезesnext
// Раньше: многословный паттерн upsert для Map
if (!map.has("key")) map.set("key", defaultValue)
const value = map.get("key")
// Теперь: чисто и лаконично
const value = map.getOrInsert("key", defaultValue)
Консолидация DOM-типов
dom.iterable и dom.asynciterable теперь объединены в базовую библиотеку dom. Больше не нужно перечислять их отдельно в вашем tsconfig.json. Если вы использовали "lib": ["dom", "dom.iterable"], можно упростить до "lib": ["dom"].
Subpath-импорты, начинающиеся с #/
TypeScript теперь поддерживает Node.js subpath-импорты с использованием префикса #/. Это чётко соответствует полю imports в package.json и делает эту функцию гораздо ближе к паттернам алиасов, с которыми уже знакомы пользователи бандлеров.
Discover how at OpenReplay.com.
Критические изменения в TypeScript 6.0: что действительно сломает ваш проект
Здесь сосредоточена большая часть усилий по миграции на TypeScript 6.0. Изменились несколько настроек компилятора по умолчанию.
| Настройка | Значение по умолчанию в TypeScript 6.0 |
|---|---|
strict | true |
module | esnext |
target | текущая поддерживаемая версия ES (es2025 сейчас) |
types | [] (пустой массив) |
rootDir | директория tsconfig |
noUncheckedSideEffectImports | true |
Изменение types: [] — одно из самых значительных. Раньше TypeScript автоматически включал каждый пакет из node_modules/@types. Теперь по умолчанию ничего не включается. Проекты, которые полагаются на глобальные переменные из @types/node, @types/jest или подобных пакетов, увидят ошибки вроде:
Cannot find name 'process'. Try adding 'node' to the types field in your tsconfig.
Исправьте это явно:
{
"compilerOptions": {
"types": ["node", "jest"]
}
}
Изменение rootDir также распространено. Если ваши выходные файлы внезапно появляются в dist/src/index.js вместо dist/index.js, добавьте "rootDir": "./src" в ваш tsconfig.
Ещё одно изменение, заслуживающее внимания, — noUncheckedSideEffectImports: true. Если в вашей кодовой базе есть импорты только с побочными эффектами с опечатками или ненадёжным разрешением, TypeScript 6.0 с большей вероятностью пометит их.
Устаревшие функции TypeScript 6.0: что удалить перед TypeScript 7
Эти опции объявлены устаревшими в 6.0 для перехода на TypeScript 7.0, а некоторые старые поведения уже удалены:
--target es5(минимальный поддерживаемый таргет теперь ES2015)--moduleResolution node/--moduleResolution classic→ мигрируйте наnodenextилиbundler--module amd,umd,systemjs,none--baseUrl→ перенесите префикс непосредственно в ваши записиpaths--outFile→ используйте бандлер вроде esbuild, Vite или RollupesModuleInterop: falseиallowSyntheticDefaultImports: false- Устаревший синтаксис пространств имён
module Foo {}→ используйтеnamespace Foo {} - Синтаксис импорта
assert→ замените наwith
Вы можете временно отключить предупреждения об устаревших функциях с помощью "ignoreDeprecations": "6.0" в вашем tsconfig, но это следует рассматривать как краткосрочное решение.
Обновление до TypeScript 6.0
Установите текущий релиз-кандидат 6.0 с помощью:
npm install -D typescript@rc
Запустите tsc --noEmit и проработайте ошибки. Большинство проблем будут связаны с массивом types, rootDir, импортами с побочными эффектами и устаревшими опциями.
Заключение
TypeScript 6.0 — это релиз для очистки, а не демонстрация новых возможностей. Его цель — отказаться от устаревших настроек по умолчанию, выровнять компилятор с современным JavaScript и подготовить почву для нативной линейки TypeScript 7.0. Чем раньше вы решите эти миграционные изменения — обновлённые массивы types, явные значения rootDir, проблемы с импортами побочных эффектов и замену устаревших опций — тем более гладким будет ваш переход на TypeScript 7.0.
Если вы хотите получить полную техническую информацию от команды TypeScript, вы также можете прочитать официальное объявление о TypeScript 6.0 RC.
Часто задаваемые вопросы
Скорее всего, да, если ваш tsconfig полагался на неявные настройки по умолчанию. Наиболее частые проблемы возникают из-за того, что поле types теперь по умолчанию является пустым массивом, rootDir теперь указывает на директорию tsconfig, и более строгая обработка импортов с побочными эффектами. Запустите tsc --noEmit после обновления, чтобы выявить все ошибки перед внесением изменений.
TypeScript 6.0 — это финальный релиз, построенный на оригинальном компиляторе на базе JavaScript. Он фокусируется на очистке настроек по умолчанию и объявлении устаревшими legacy-опций. Ожидается, что TypeScript 7.0 станет нативным преемником на базе Go с гораздо более быстрой сборкой и инструментами редактора. Версия 6.0 — это подготовительный шаг для этого перехода.
Да. Старый режим разрешения node в TypeScript 6.0 относится к устаревшему поведению в стиле node10 и объявлен устаревшим, а classic вообще удалён. Используйте nodenext, если ваш проект запускается напрямую в Node.js, или bundler, если вы полагаетесь на инструмент вроде Vite, Webpack, Bun или esbuild для разрешения и сборки ваших модулей.
Можете, но обычно вам потребуется явно установить опцию module, если esnext — это не то, что вам нужно. Если ваш проект всё ещё генерирует CommonJS, укажите module как commonjs в вашем tsconfig. Однако рассмотрите возможность миграции на современные настройки модулей, где это возможно, поскольку TypeScript 6.0 явно отдаёт предпочтение современным рабочим процессам с приоритетом ESM.
Complete picture for complete understanding
Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.
Check our GitHub repo and join the thousands of developers in our community.