TypeScript остается одним из самых востребованных языков программирования в мире фронтенд- и бэкенд-разработки. Сегодня на горизонте появилась новая версия – TypeScript 5.9 Release Candidate (RC), которая привносит множество значимых нововведений и оптимизаций. Рассмотрим ключевые особенности этой версии и как они влияют на процессы разработки, повышая гибкость, производительность и удобство инженеров. Пожалуй, одной из самых заметных перемен в TypeScript 5.
9 стала модернизация команды tsc --init. Ранее при инициализации проекта генератор создавал громоздкий файл tsconfig.json с большим числом закомментированных опций, что зачастую приводило к удалению большинства параметров, так как они казались избыточными. Теперь же Microsoft пошла навстречу сообществу и упростила конфигурацию: чистый tsc --init формирует компактный, но в то же время продуманный tsconfig.json с предустановленными значениями, ориентированными на типичные современные сценарии разработки.
Среди них — использование модулей вместо глобальных скриптов, установка цели компиляции esnext для поддержки последних возможностей ECMAScript, а также предустановленные опции, направленные на строгость типизации и удобство работы с JSX. Еще одним знаковым улучшением стала внедренная поддержка новой функциональности ECMAScript — import defer. Этот синтаксис открывает новые горизонты в управлении выполнением импортируемых модулей: теперь загрузка и выполнение кода в модуле можно отложить до первого обращения к его содержимому. В отличие от стандартного импорта, который сразу запускает инициализацию модуля и связанных с ним побочных эффектов, import defer загружает модуль, но не выполняет его код, пока не происходит обращение к его экспортам. Это особенно важно для тяжелых или специфичных по платформе функций, которые не всегда нужны сразу при старте приложения.
Такая отложенная загрузка способствует оптимизации старта приложений и снижению расходов на ресурсы. Стоит отметить, что import defer поддерживает только неймспейс импортов (import defer * as feature), и не работает с именованными или дефолтными импортами. Кроме того, данный синтаксис будет работать только в модульных настройках preserve и esnext, то есть в рантаймах, поддерживающих новую спецификацию, либо с помощью соответствующих инструментов сборки. Ярким примером авторов поддержки import defer стала работа Николо Рибаудо, который внес значительный вклад в предложения TC39. Еще одним важным дополнением в TypeScript 5.
9 стало появление опции --module node20. Эта настройка призвана максимально точно моделировать поведение Node.js версии 20 в плане обработки модулей и разрешения их зависимостей. Ранее существовал вариант — nodenext — который часто меняется и находится в разработке, тогда как node20 — стабильный вариант с четко определенными правилами. При использовании --module node20 компиляция по умолчанию нацелена на стандарт es2023, тогда как nodenext подразумевает esnext, что влияет на совместимость и особенности кода.
Такие изменения помогут разработчикам, ориентированным на экосистему Node.js, легче адаптироваться к актуальной версии runtime, избегая проблем с несовпадением модульных спецификаций. TypeScript 5.9 также улучшил работу с DOM API, добавив краткие описания к большинству интерфейсов и методов, что облегчает понимание и ускоряет процесс разработки. Вместо отвлечения на внешние ресурсы, разработчики получают полезные подсказки прямо в редакторе, что улучшает эргономику работы и снижает время на поиск справочной информации.
Особое внимание было уделено удобству отображения информации в редакторах кода. Теперь реализована функция расширяемых ховеров (Expandible Hovers), позволяющая погружаться глубже в типы и структуры данных, не покидая текущий контекст. Нажатие на плюсик раскрывает подробности типов, что особенно полезно при работе со сложными структурами, где типы часто сложны для понимания. Такие улучшения сильно облегчают чтение и отладку кода. Еще один момент — настраиваемая максимальная длина ховеров.
Раньше иногда информация в подсказках обрезалась, и самые важные сведения могли не показываться. Теперь длина отображаемого текста стала больше по умолчанию, и в редакторах, таких как VS Code, появилась возможность настроить этот параметр через конфигурацию, что дает дополнительный контроль пользователям. Оптимизации производительности в новой версии также нельзя оставить без внимания. TypeScript 5.9 применил кэширование промежуточных инстанцирований типов при работе с параметрами типа, что значительно снижает нагрузку при сложной типизации в больших библиотеках, таких как Zod или tRPC.
Улучшения в обходе лишних замыканий в проверках существования файлов повысили скорость компиляции до 11% в определённых сценариях. Все эти изменения делают сборку быстрее и стабильнее, улучшая опыт даже при масштабных проектах. В числе поведенческих изменений стоит выделить корректировки в lib.d.ts касательно типа ArrayBuffer и его соподтипов, в том числе Node.
js Buffer. Эти изменения могут привести к появлению новых ошибок типов в ранее работающем коде. Например, теперь тип ArrayBuffer больше не является супертипом для TypedArray и Buffer. Чтобы решить эти проблемы, рекомендуется обновить пакет @types/node и при необходимости явно указывать более конкретные типы, такие как Uint8Array с параметром шаблона. Кроме того, в TypeScript 5.
9 изменены механизмы вывода типов для устранения утечек типов (type variable leaks), что повышает надежность системы типизации, но иногда требует явного добавления аргументов типов в дженерики для исправления новых ошибок компиляции. Все эти нововведения и улучшения подчеркивают стремление команды TypeScript создать мощный, современный и удобный инструмент для разработки. Уже сейчас можно попробовать релиз-кандидат версии 5.9 с помощью команды npm install -D typescript@rc, оценить новые возможности и подготовиться к финальному релизу, который ожидается в ближайшее время. Видно, что TypeScript продолжит развиваться не только как язык с расширенными возможностями типизации, но и как полноценная платформа, интегрированная с современными экосистемами и инструментами.