Обзор TypeScript 5.5: Inferred Type Predicate

Обзор TypeScript 5.5: Inferred Type Predicate

Введение

TypeScript 5.5 (бета-версия) вносит ряд значительных изменений, главным из которых является введение inferred type predicate. Давайте разберемся, что это такое и как это может упростить нашу работу с типами.

Что такое Type Predicate?

Type predicate - это функция, которая помогает TypeScript определить тип переменной в определенном контексте. Рассмотрим пример:

Обзор TypeScript 5.5: Inferred Type Predicate

В этом примере `cupsInStock` все еще имеет тип `(CoffeeCup | undefined)[]`, хотя мы отфильтровали все `undefined` значения. Раньше нам приходилось явно определять функцию type predicate:

Обзор TypeScript 5.5: Inferred Type Predicate

Inferred Type Predicate в TypeScript 5.5

TypeScript 5.5 вводит концепцию inferred type predicate, которая автоматически выводит type predicate для функций, удовлетворяющих определенным условиям:

1. Функция не имеет явного типа возврата или predicate annotation.

2. В функции только один явный return (без неявных return).

3. Функция не изменяет входной параметр.

4. Функция возвращает boolean, связанный с уточнением типа параметра.

Пример:

Обзор TypeScript 5.5: Inferred Type Predicate

В этом случае `isNumber` будет автоматически выведен как `(x: unknown) => x is number`.

Ограничения и Особенности

1. Изменение параметра функции препятствует выведению:

Обзор TypeScript 5.5: Inferred Type Predicate

2. Неоднозначные случаи:

Обзор TypeScript 5.5: Inferred Type Predicate

Здесь `filter(e => !!e)` не будет работать как ожидается, потому что `0` (валидное число) также будет отфильтровано.

🔗 Полезные материалы и курсы по разработке:

22
4 комментария

Писать на сайте про бизнес статью о программировании как наглядный пример партизанского маркетинга

Ответить

Тут тоже есть тема - Разработка. Почему бы и нет)

1
Ответить

Совершенно случайно увидела здесь эту статью.
Спасибо!
Поигралась в песочнице с разными версиями. Нравится куда идет typescript.

Ответить

Супер)

Ответить