🔟Обработка ошибок

⚡ 1) Intro

⚡ 2) RTK query обработка ошибок

⚡ 2.1) Теперь попробуем допустить ошибку

// let { packId } = useParams<{ packId: string }>();
let packId = "dasdsad";

⚡ 2.2) Поставим debugger и напишем возвращаемый тип ошибки

⚡ 2.3) Теперь попробуем вывести ошибку

Получим вот такой результат

⚡ 2.4) Обратимся к документации arrow-up-rightи попробуем понять что с этим делать

circle-info

Когда ошибка корректно передается из base queryarrow-up-right, RTK Query предоставляет ошибку напрямую.

Если пользовательский код вызывает неожиданную ошибку, а не обработанную ошибку, эта ошибка будет преобразована в формат SerializedError.

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

Это можно сделать при помощи сужения типовarrow-up-right или используя предикатные функцииarrow-up-right

⚡ 3) The in operator narrowing

Оператор in в TypeScript используется для проверки наличия свойства в объекте или наличия элемента в массиве. Он выполняет проверку и возвращает логическое значение true или false.

Вот примеры использования оператора in:

1. Проверка наличия свойства в объекте:

В этом примере мы проверяем наличие свойств "name" и "address" в объекте person. Оператор in возвращает true, если свойство присутствует, и false, если свойство отсутствует.

2. Проверка наличия элемента в массиве:

Здесь мы проверяем наличие элемента с индексом 2 и 5 в массиве numbers. Оператор in возвращает true, если элемент с указанным индексом присутствует, и false, если элемент отсутствует.

3. Проверка наличия свойства в объекте с использованием условного оператора:

В этом примере мы проверяем наличие свойства "model" в объекте car. Если свойство присутствует, мы выводим его значение. В противном случае выводится сообщение о том, что модель автомобиля недоступна.

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

⚡ 4) Возвращаемся к документации

Пробуем применить пример к нашему коду. Разберем вот этот кусок кода

Проанализировав, можно придти вот к такому решению

Выглядит конечно так себе... Но такое решение нам диктует документация... Можно конечно сделать вот так

Но из плюсов 1 варианта мы все таки страхуемся от непредвиденных случаев, а во втором варианте просто полагаемся, что ошибка может быть именно такой...

⚡ 5) Глобальная обработка ошибок

Ну так может не будем обрабатывать ошибку из хука, а будем обрабатывать глобально в app.slice.ts

В общей обработке ошибок не получится сделать, т.к. мы там завязывались на санки, но никто нам запрещает сделать еще один addMatcher

Мы рассмотрели вариант типизации ошибки, которая приходит с хука, но если мы ошибку обрабатываем в catch, то становится еще хуже 😁

Тут нам понадобятся знания про предикатные типыarrow-up-right

⚡ 7) Type predicates

В TypeScript "type predicates" — это специальные выражения, которые позволяют уточнить тип переменной во время выполнения кода. Они помогают более точно определить тип данных в условных выражениях, основываясь на свойствах или структуре объекта.

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

Для создания типовых предикатов в TS используется специальный синтаксис с использованием оператора is. Вот пример:

В этом примере isNumber — это типовый предикат. Он принимает значение типа unknown и возвращает true, если значение является числом, или false в противном случае.

Далее, после определения типового предиката, вы можете использовать его в условных выражениях для уточнения типа переменной. Например:

В этом примере, если значение value является числом, то TypeScript позволяет умножить его на multiplier, так как тип переменной value уточнен внутри блока if с помощью типового предиката isNumber.

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

❗Рассмотрим пример из документации и сделаем выводы

Last updated