Вышел 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 ошибок, связа