Вышел TypeScript 5.5: что изменилось в новом релизе

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Вышел TypeScript 5.5: что изменилось в новом релизе

14 июня 2024 года команда Microsoft официально представила релиз TypeScript 5.5 — одну из самых значимых версий популярного статического типизатора для JavaScript. В новом обновлении разработчики получили не только исправления багов, но и ряд мощных функций, упрощающих написание кода и повышающих производительность. Рассмотрим главные нововведения.

Изолированные объявления (Isolated Declarations)

Самое ожидаемое новшество TypeScript 5.5 — экспериментальная поддержка режима Isolated Declarations. Теперь компилятор может генерировать файлы объявлений (.d.ts) для каждого модуля независимо, без необходимости загружать весь проект. Это особенно полезно для больших монорепозиториев и сборок, где ускорение работы компилятора становится критичным. Включить режим можно через флаг --isolatedDeclarations в tsconfig.json.

  • Ускорение сборки: изолированная компиляция типов позволяет распараллелить процесс и сократить время ожидания.
  • Удобство для библиотек: авторы пакетов теперь могут быстрее генерировать актуальные типы.
  • Обратная совместимость: новый режим не ломает существующий код, его можно внедрять постепенно.

Контроль утечек памяти в замыканиях

TypeScript 5.5 научился предупреждать о потенциальных утечках памяти, связанных с замыканиями. Компилятор теперь анализирует, не удерживает ли замыкание ненужные ссылки на большие объекты или DOM-элементы. Например:

function setupHandler() {
    const largeData = new Array(1000000).fill('x');
    document.getElementById('btn')?.addEventListener('click', () => {
        console.log('clicked');
        // Ранее компилятор не предупреждал, что largeData остаётся в памяти
    });
}

Теперь TypeScript выдаст предупреждение, если обнаружит, что замыкание захватывает переменные, которые не используются внутри него, но остаются в памяти из-за привязки к обработчику. Это помогает писать более эффективный код без ручного профилирования.

Улучшенный вывод типов для массивов и деструктуризации

В новой версии значительно доработан механизм вывода типов. TypeScript 5.5 стал точнее определять типы в деструктуризации массивов и кортежей. Например, при работе с API, возвращающим кортежи, компилятор теперь корректно распознаёт каждый элемент:

function fetchUser() {
    return [1, 'Alice'] as const;
}
const [id, name] = fetchUser(); // id: number, name: string (ранее был union)

Это избавляет от лишних ручных аннотаций и делает код чище.

Автоматическое определение типов из JSDoc

При использовании allowJs и проверке JavaScript-файлов TypeScript 5.5 научился автоматически выводить типы из комментариев JSDoc даже в сложных случаях — например, для колбэков с несколькими параметрами. Это особенно актуально для проектов, которые постепенно мигрируют с JS на TS.

Прочие улучшения и исправления

  • Оптимизация скорости: до 15% ускорения компиляции для больших проектов за счёт кэширования промежуточных результатов.
  • Новые флаги: --noUncheckedSideEffectImports запрещает импорты без побочных эффектов, если они не используются явно.
  • Исправление багов: устранено более 80 ошибок, связа

Рекомендуем библотеки