TypeScript 6.0 — это не просто очередная мажорная версия с галочкой в changelog. Здесь есть реальные breaking changes, которые затрагивают конфигурацию компилятора и могут сломать сборку там, где ты этого совсем не ждёшь.
Что изменилось в компиляторе
В 6.0 команда TypeScript продолжила курс на более строгое и предсказуемое поведение. Ряд опций, которые раньше работали «по умолчанию мягко», теперь либо ведут себя иначе, либо требуют явного указания в конфиге.
Ключевые направления изменений:
- Разрешение модулей — поведение
moduleResolutionстало строже; старые значения вродеnodeмогут давать неожиданные результаты в современных проектах verbatimModuleSyntax— набирает вес как рекомендуемый подход к импортам; влияет на то, как TypeScript обрабатываетimport typeisolatedModules— связанные изменения делают поведение более консистентным с бандлерами типа esbuild и Vite- Строгость по умолчанию — некоторые проверки, которые раньше нужно было включать вручную, теперь активны в новых проектах из коробки
Как привести tsconfig в порядок
Перед обновлением пакета стоит пройтись по конфигу вручную. Вот практический чеклист:
- Проверь
moduleResolution— для современных проектов рекомендуетсяbundlerилиnode16/nodenext, а не простоnode - Явно укажи
module— значение должно соответствовать твоему окружению;ESNextдля бандлеров,CommonJSдля Node.js без ESM - Добавь
verbatimModuleSyntax: true— если используешь бандлер, это уберёт целый класс потенциальных проблем с импортами - Проверь
target— убедись, что он актуален;ES2022или выше разумен для большинства современных проектов - Удали устаревшие опции — часть флагов в 6.0 устарела или изменила семантику;
tsc --showConfigпоможет увидеть, что реально применяется
Практический совет по миграции
Если проект большой, не обновляй TypeScript и конфиг одновременно. Сначала обнови пакет, запусти tsc --noEmit и посмотри на ошибки — они покажут, где конфиг расходится с новым поведением компилятора.
Ошибки компилятора после мажорного обновления — это не баги, это документация. Читай их внимательно.
Отдельно стоит проверить paths и baseUrl — в связке с новым разрешением модулей они могут вести себя неожиданно, особенно если проект использует монорепо или нестандартную структуру.
Итого
TypeScript 6.0 делает компилятор более предсказуемым — но за это придётся заплатить явностью конфигурации. Зато после миграции сборка будет работать именно так, как написано в конфиге, а не «примерно так, как ты думал».