TypeScript продолжает активно развиваться, и релиз версии 5.9, вышедший в августе 2025 года, стал важной вехой для сообщества разработчиков. Этот выпуск сфокусирован на улучшении удобства настройки, внедрении современных возможностей ECMAScript и повышении производительности. Нововведения в версии 5.9 помогают разработчикам писать более чистый, стабильный и оптимизированный код, а также упрощают интеграцию с последними стандартами JavaScript и Node.
js. В этой статье мы подробно рассмотрим основные изменения и новые возможности TypeScript 5.9, которые заслуживают внимания как новичков, так и опытных пользователей. Одним из заметных изменений стало обновление флага tsc --init, который отвечает за создание базового конфигурационного файла tsconfig.json.
Если раньше при инициализации проекта этот файл выглядел перегруженным и содержал множество закомментированных параметров, на практике большинство разработчиков сразу удаляли лишнее. Специалисты TypeScript пересмотрели данный подход и сделали конфигурацию более минималистичной и одновременно содержательной. Теперь команда tsc --init генерирует tsconfig.json с продуманным набором важных опций, которые часто используются в реальных проектах. Например, включение строгой проверки типов (strict) и выбор модуля по умолчанию nodenext обеспечивают более современный и безопасный код с минимальными усилиями при запуске нового проекта.
Это новшество делает старт работы с TypeScript проще и позволяет избежать типичных ошибок с конфигурацией. Важным дополнением стала поддержка нового синтаксиса import defer, который вводит отложенную загрузку модулей. В ECMAScript долго разрабатывалась возможность загружать модули без немедленного выполнения их содержимого, что улучшает контроль над инициализацией и побочными эффектами. TypeScript 5.9 реализовал эту возможность, позволяя импортировать весь модуль через import defer * as namespace from ".
/module.js", причем сам модуль будет загружен, но выполнен только тогда, когда произойдет первый доступ к его экспортам. Такая функциональность особенно полезна для крупных приложений или когда есть дорогостоящие операции инициализации, которые лучше отложить до реального использования. Это повышает производительность при старте приложения и улучшает управление ресурсами. Однако важно отметить, что import defer поддерживает только namespace imports и не позволяет использовать именованные или дефолтные импорты.
Кроме того, поскольку эта функциональность является экспериментальной и зависит от поддержки в рантайме, TypeScript не изменяет такой код при трансформации, поэтому import defer работает только с режимами --module preserve и esnext. Для пользователей Node.js тоже появились позитивные новости: теперь в TypeScript официально введена опция --module node20, которая моделирует поведение Node.js версии 20. Ранее существовали варианты nodenext, которые были менее предсказуемы и могли изменяться с выходом новых версий.
node20 предоставляет стабильную и однозначно определённую модель модулей и разрешения, что упрощает разработку серверных приложений и библиотек с современным стеком. При использовании этой опции компилятор автоматически устанавливает target в значение es2023, что соответствует последним стандартам JavaScript, поддерживаемым в Node.js 20. Таким образом, разработчики получают гарантированную совместимость с экосистемой Node.js, избавляясь от непредвиденных нюансов с модулями.
Для улучшения работы с DOM API в TypeScript 5.9 добавлены краткие описания для многих интерфейсов и методов, основанные на документации MDN. Раньше типы DOM редко сопровождались объяснениями в редакторах, и чтобы понять, что именно делает та или иная функция, приходилось переходить на внешние сайты. Теперь, благодаря дополнительным сводкам, разработчики могут быстро ознакомиться с назначением API прямо в подсказках редактора. Это повышает производительность и качество кода, особенно при работе с веб-платформой.
Другой заметной новинкой стал экспериментальный режим расширяемых ховер-информаций. Ховеры, задействуемые в редакторах, показывают сведения о типах и переменных, но зачастую были слишком краткими, что вынуждало переходить к определению типа для просмотра всей структуры. TypeScript 5.9 добавил в превью-режиме кнопку раскрытия в подсказках, позволяющую более подробно изучать типы на месте, не покидая контекст кода. Эта функция окажется полезной в больших проектах, где сложная типизация и вложенные типы встречаются часто.
Разработчики редакторов, таких как VS Code, уже интегрируют эту возможность, обещая более комфортную и быструю навигацию по типам. Важным улучшением стал настройка максимальной длины ховер-подсказок. Раньше длинные типы обрезались, что могло привести к потере нужной информации, особенно в случае обширных типовых описаний. Теперь можно регулировать длину отображаемых данных через настройку js/ts.hover.
maximumLength в редакторе, что позволяет гибко адаптировать поведение языка под свои нужды. По умолчанию лимит увеличен, так что пользователи уже получат больше сведений без дополнительных настроек. С точки зрения производительности TypeScript 5.9 реализовал несколько оптимизаций, которые положительно сказываются на скорости компиляции и экономии ресурсов. Одно из важных изменений связано с кешированием промежуточных инстанцирований типов во время замены параметров.
Особенно это актуально для сложных библиотек с множественным уровнем обобщений, таких как Zod и tRPC, где неоднократно повторяются схожие вычисления типов. Новая схема кеширования позволяет избежать избыточных вычислений, снижая нагрузку и минимизируя ошибки, связанные с глубиной инстанцирования. Еще одна оптимизация касается избегания создания лишних функций-замыканий при проверках существования файлов и каталогов, что увеличивает производительность при больших проектах. Но не обходится и без некоторых изменений в поведении и типах. В этой версии изменился интерфейс ArrayBuffer и его отношение к TypedArray, включая Buffer из Node.
js. Теперь ArrayBuffer не считается суперклассом для некоторых типов, что приводит к новым ошибкам компиляции при неправильном использовании буферов. Такой шаг является частью общей чистки и точного описания типов, однако может потребовать адаптации кода, особенно если проект активно взаимодействует с бинарными данными и потоками. Для упрощения перехода рекомендуется обновить пакет @types/node и, при необходимости, указывать более конкретные типы, например Uint8Array с явным аргументом типа. Еще одна важная область — изменения в инференсе (выведении) типов.
Для устранения «утечек» переменных типов TypeScript 5.9 ужесточает правила вывода, что может привести к появлению новых ошибок в некоторых проектах. Обычно такие ситуации решаются указанием явных параметров типа в вызовах обобщенных функций, что делает код более предсказуемым и безопасным. Хотя это может потребовать дополнительных правок в существующих кодовых базах, последствия позитивны с точки зрения стабильности и надежности системы типов. Все эти новшества предвещают постепенный переход к следующему крупному релизу — TypeScript 6.
0. Команда разработчиков планирует использовать 6.0 как этап подготовки к более масштабному обновлению с нативным портом компилятора, который будет реализован в версии 7.0. Ожидается, что 6.
0 станет временем для адаптации к новым требованиям, с возможными постепенными депрецирующими изменениями и обновлениями в поведении типизации, однако останется в целом совместимым с 5.9. Таким образом, разработчики получают время для плавного перехода и обновления своих проектов. Подводя итог, TypeScript 5.9 — это важный релиз, направленный на улучшение удобства работы и производительности, приближающий язык к современным стандартам JavaScript и экосистеме Node.
js. Минималистичный, но содержательный tsconfig.json, новый синтаксис import defer, стабильная поддержка модулей Node.js 20, улучшенные подсказки и оптимизации раскрывают перед разработчиками современные возможности и повышают качество кода. Несмотря на некоторые изменения в поведении типов и строгой типизации, новая версия предлагает надежную платформу для разработки как фронтенд, так и бэкенд приложений.
Пользователям стоит ознакомиться с обновленной документацией и протестировать новые функции в своих проектах, чтобы максимально эффективно использовать возможности TypeScript 5.9 и подготовиться к будущим версиям.