-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathisVkError.ts
38 lines (35 loc) · 1.26 KB
/
isVkError.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { ErrorData } from '@vkontakte/vk-bridge';
import { vkErrorTypes } from './consts';
/**
* Утилита для проверки произвольного значения на соответствие
* типу {@link ErrorData}, обозначающему ошибку, приходящую от API VK
*
* @param {any} value Произвольное значение.
* @returns {boolean} Если переданное значение соответствует
* типу ошибки от API VK, возвращает true, а компилятор TypeScript
* будет считать, что переданное значение имеет тип {@link ErrorData}.
* Иначе функция возвращает false, а TypeScript считает,
* что переданное значение не имеет тип {@link ErrorData}
*
* @example
* try {
* await bridge.send(...);
* } catch (error) {
* if (!isVkError(error)) {
* return;
* }
*
* if (checkVkUserDenied(error)) {
* return;
* }
* }
*/
const isVkError = (value: any): value is ErrorData => {
return (
typeof value === 'object' &&
value !== null &&
'error_data' in value &&
vkErrorTypes.has(value?.error_type)
);
};
export { isVkError };