🆕📜 Что нового в TypeScript 5.5: 4 ключевых улучшения

В версии 5.5 TypeScript предлагает ряд новшеств, которые делают код более надежным и читаемым. Рассмотрим ключевые изменения, включая предикаты выводимых типов и оптимизацию работы с массивами.

Привет, друзья! Я Кирилл Мыльников, frontend-разработчик в компании Usetech. Сегодня хочу рассказать о новых возможностях TypeScript 5.5. Как обычно, разберем теорию и сразу перейдем к практике.

Использование типов в коде помогает ясно выражать намерения и выявлять потенциальные ошибки, такие как опечатки и проблемы с null/undefined. В версии 5.5 значимы предикаты выводимых типов, проверка синтаксиса регулярных выражений, улучшения в фильтрации массивов и другие инновации.

В данной публикации подробно рассматриваются четыре значительных улучшения в версии 5.5 и их сравнение с ограничениями предыдущей версии 5.4. Эти нововведения позволяют разработчикам создавать более безопасный и легко поддерживаемый код, что делает его неотъемлемым инструментом в веб-разработке.

  1. Последняя версия TypeScript (5.5) предлагает значительные улучшения в проверке типов, обеспечивая более точное обнаружение ошибок еще на этапе компиляции. Разработчики встречают более безопасный код благодаря улучшенному выводу типов.
  2. Новые функциональности, такие как предикаты выводимых типов и сужение потока управления, значительно улучшают опыт разработки, упрощая чтение и поддержку кода.
  3. TypeScript 5.5 гарантирует совместимость с существующими кодовыми базами, облегчая обновление без необходимости кардинальных изменений и обеспечивая плавный переход.
  4. Эта версия эффективно обрабатывает критические изменения и устаревшие функции, позволяя разработчикам адаптировать свой код к современным стандартам и передовым практикам веб-разработки.
👨‍💻🎨 Библиотека фронтендера
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека фронтендера»

Сравнение с TypeScript 5.4

Новая версия TypeScript предоставляет разработчикам более совершенные инструменты, обеспечивает более плавные переходы и повышает качество кода.

  1. Новое обновление предикатов выводимых типов в TypeScript существенно улучшает отслеживание типов для переменных. Теперь типы могут более точно выводиться по мере их передвижения по коду, что способствует обнаружению более тонких ошибок еще на этапе компиляции. Это значительное улучшение повышает безопасность кода и обеспечивает более надежную работу приложений.
  2. Улучшение анализа потока управления для доступа с константной индексацией в TypeScript приводит к более точному сужению типа при динамическом доступе к свойствам. Теперь система типов может более точно определять типы данных при доступе к свойствам объектов с использованием константных значений в качестве индексов. Это позволяет избежать ошибок и повысить точность определения типов данных при работе с динамическими данными в приложениях.
  3. Проверка синтаксиса регулярных выражений в TypeScript является базовым инструментом, который способствует улучшению производительности. Она обеспечивает баланс между гибкостью и корректностью, что позволяет создавать более выразительные шаблоны без потери в безопасности. Данное улучшение помогает разработчикам писать более эффективный и безопасный код при работе с регулярными выражениями.
  4. Оптимизация производительности в TypeScript, сокращающая время сборки и увеличивающаяся скорость итераций, значительно повышает эффективность разработки приложений. Это улучшение позволяет разработчикам быстрее создавать, тестировать и внедрять изменения, что ускоряет процесс разработки и повышает производительность команды.
  5. В новых методах для объекта Set в EcmaScript представлены функции объединения, пересечения, разности и симметрической разности множеств. Эти методы значительно улучшают удобство и эффективность операций с множествами, что делает работу с ними более интуитивной и эффективной. Нововведения позволяют разработчикам легче выполнять распространенные операции над множествами и повышают общую производительность при работе с ними.

В новой версии TypeScript 5.5 представлены следующие улучшения

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

  1. Улучшение фильтра массива.
  2. Исправления вывода ключа объекта.
  3. Функции регулярных выражений.
  4. Методы установки.

Улучшение в фильтре массива

В версии TypeScript 5.5 были значительно улучшены возможности вывода типов, особенно при использовании метода filter. Применительно к Array.prototype.filter по сравнению с предыдущей версией, этот метод теперь более точно выводит типы данных. Ранее возникали сложности с правильным выводом типов при фильтрации массивов, содержащих нулевые или неопределенные значения. Например, при фильтрации массива для удаления нулевых значений не всегда корректно определялся тип результирующего массива.

Пример

const nums = [1, 2, null, 4];
const filteredNums = nums.filter(num => num !== null);
// filteredNums is inferred as (number | null)[]

Несмотря на фильтрацию нулевых значений, тип filteredNums остается (number | null)[]. Это означает, что вам могут потребоваться дополнительные проверки типов в последующих частях вашего кода.

В последней версии эта проблема была успешно решена. При использовании предиката типа (num is number) выводится тип filteredNums как number[], что исключает необходимость в дальнейших проверках типов данных.

const nums: (number | null)[] = [1, 2, null, 4];
const filteredNums = nums.filter((num): num is number => num !== null);
// filteredNums is correctly inferred as number[]

Язык понимает тип предиката, что позволяет безопасно отфильтровывать нулевые значения из массива, исключая потенциальные ошибки.

Исправления вывода ключа объекта

Есть несколько значительных улучшений, касающихся вывода ключа объекта. Рассмотрим следующий пример:

//Initial Behavior (Issue)
type MustBeArray<T extends any[]> = T;
type Hmm<T extends any[]> = T extends number[] ? MustBeArray<{ [I in keyof T]: 1 }> : never;

// This produces an error in previous releases:
type Z = Hmm<[2, 3, 4]>; // Error: Type '{ [I in keyof T]: 1; }' does not satisfy the constraint 'any[]'.

В коде выше возникает проблема из-за того, что тип пересечения MustBeArray<{ [I in keyof T]: 1 }> не соответствует ограничению 'any[]'. Это приводит к неожиданным ошибкам при применении сопоставленных типов с определенными условиями типа.

Проблема была исправлена. TypeScript теперь корректно выводит тип предиката для ключей объекта. Путем переписывания этого примера, чтобы избежать ошибок, мы получаем:

type Hmm<T extends any[]> = T extends number[] ? { [I in keyof T]: 1 } : never;
type Z = Hmm<[2, 3, 4]>; // Result: [1, 1, 1]

Теперь тип { [I in keyof T]: 1 } правильно удовлетворяет ограничению и выводится как [1, 1, 1]. Он выводится как [1, 1, 1], поскольку массив [2, 3, 4] удовлетворяет ограничению, являясь массивом чисел.

Пример 1: Улучшения синтаксиса

В последнем обновлении теперь можно создавать более выразительные регулярные выражения без лишних ограничений. Рассмотрим следующий пример:

// TypeScript 5.5
const regex55 = /\d{2,4}/; // Matches 2 to 4 digits
console.log(regex55.test("123")); // true
console.log(regex55.test("12345")); // true
console.log(regex55.test("1")); // false (less than 2 digits)

Это регулярное выражение ранее вызывало ошибку в более ранних версиях из-за более строгой проверки синтаксиса.

Пример 2: Совместимость с существующими шаблонами

В последнем релизе обеспечена совместимость с существующими шаблонами регулярных выражений. Давайте сравним это с более старыми обновлениями.

// Current Version
const regex55 = /[a-z]+/i; // Case-insensitive match for letters
console.log(regex55.test("Hello")); // true
console.log(regex55.test("WORLD")); // true

// Previous update (would also work)
const regex54 = /[a-z]+/i;
console.log(regex54.test("Hello")); // true
console.log(regex54.test("WORLD")); // true

Обе версии позволяют осуществлять сопоставление без учёта регистра, но версия 5.5 обладает большей гибкостью.

Последняя версия улучшает надёжность кода, сокращает время отладки и гарантирует соответствие регулярных выражений стандартам ECMAScript.

Заключение

В этой статье мы рассмотрели несколько новых функций версии 5.5, выпущенной 20 июня 2024 года. Обсуждаемые функции представляют новые обновления, позволяющие разработчикам работать с необязательными типами в JavaScript, что делает его подходящим для крупномасштабных приложений в различных браузерах. Это обновление является необходимым для эффективной разработки и обеспечения совместимости с более широкой экосистемой JavaScript.

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

eFusion
01 марта 2020

ТОП-15 книг по JavaScript: от новичка до профессионала

В этом посте мы собрали переведённые на русский язык книги по JavaScript – ...
admin
10 июня 2018

Лайфхак: в какой последовательности изучать JavaScript

Огромный инструментарий JS и тонны материалов по нему. С чего начать? Расск...