Back

Что нового в TypeScript 6.0

Что нового в 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 — безопасно экранирует специальные символы регулярных выражений в строке
  • Temporal API — современная замена для Date, типизированная под esnext или temporal.esnext
  • Map.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 и делает эту функцию гораздо ближе к паттернам алиасов, с которыми уже знакомы пользователи бандлеров.

Критические изменения в TypeScript 6.0: что действительно сломает ваш проект

Здесь сосредоточена большая часть усилий по миграции на TypeScript 6.0. Изменились несколько настроек компилятора по умолчанию.

НастройкаЗначение по умолчанию в TypeScript 6.0
stricttrue
moduleesnext
targetтекущая поддерживаемая версия ES (es2025 сейчас)
types[] (пустой массив)
rootDirдиректория tsconfig
noUncheckedSideEffectImportstrue

Изменение 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 или Rollup
  • esModuleInterop: 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.

OpenReplay