mirror of
https://github.com/tenrok/axios.git
synced 2026-06-20 20:00:40 +03:00
Adding a type guard for AxiosError (#2949)
Co-authored-by: Jason Kwok <JasonHK@users.noreply.github.com>
This commit is contained in:
Vendored
+1
@@ -153,6 +153,7 @@ export interface AxiosStatic extends AxiosInstance {
|
|||||||
isCancel(value: any): boolean;
|
isCancel(value: any): boolean;
|
||||||
all<T>(values: (T | Promise<T>)[]): Promise<T[]>;
|
all<T>(values: (T | Promise<T>)[]): Promise<T[]>;
|
||||||
spread<T, R>(callback: (...args: T[]) => R): (array: T[]) => R;
|
spread<T, R>(callback: (...args: T[]) => R): (array: T[]) => R;
|
||||||
|
isAxiosError(payload: any): payload is AxiosError;
|
||||||
}
|
}
|
||||||
|
|
||||||
declare const axios: AxiosStatic;
|
declare const axios: AxiosStatic;
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ axios.all = function all(promises) {
|
|||||||
};
|
};
|
||||||
axios.spread = require('./helpers/spread');
|
axios.spread = require('./helpers/spread');
|
||||||
|
|
||||||
|
// Expose isAxiosError
|
||||||
|
axios.isAxiosError = require('./helpers/isAxiosError');
|
||||||
|
|
||||||
module.exports = axios;
|
module.exports = axios;
|
||||||
|
|
||||||
// Allow use of default import syntax in TypeScript
|
// Allow use of default import syntax in TypeScript
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether the payload is an error thrown by Axios
|
||||||
|
*
|
||||||
|
* @param {*} payload The value to test
|
||||||
|
* @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
|
||||||
|
*/
|
||||||
|
module.exports = function isAxiosError(payload) {
|
||||||
|
return (typeof payload === 'object') && (payload.isAxiosError === true);
|
||||||
|
};
|
||||||
@@ -41,6 +41,10 @@ describe('static api', function () {
|
|||||||
expect(typeof axios.CancelToken).toEqual('function');
|
expect(typeof axios.CancelToken).toEqual('function');
|
||||||
expect(typeof axios.isCancel).toEqual('function');
|
expect(typeof axios.isCancel).toEqual('function');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should have isAxiosError properties', function () {
|
||||||
|
expect(typeof axios.isAxiosError).toEqual('function');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('instance api', function () {
|
describe('instance api', function () {
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
var createError = require('../../../lib/core/createError');
|
||||||
|
var enhanceError = require('../../../lib/core/enhanceError');
|
||||||
|
var isAxiosError = require('../../../lib/helpers/isAxiosError');
|
||||||
|
|
||||||
|
describe('helpers::isAxiosError', function () {
|
||||||
|
it('should return true if the error is created by core::createError', function () {
|
||||||
|
expect(isAxiosError(createError('Boom!', { foo: 'bar' })))
|
||||||
|
.toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return true if the error is enhanced by core::enhanceError', function () {
|
||||||
|
expect(isAxiosError(enhanceError(new Error('Boom!'), { foo: 'bar' })))
|
||||||
|
.toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false if the error is a normal Error instance', function () {
|
||||||
|
expect(isAxiosError(new Error('Boom!')))
|
||||||
|
.toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -19,6 +19,7 @@ describe('instance', function () {
|
|||||||
'isCancel',
|
'isCancel',
|
||||||
'all',
|
'all',
|
||||||
'spread',
|
'spread',
|
||||||
|
'isAxiosError',
|
||||||
'default'].indexOf(prop) > -1) {
|
'default'].indexOf(prop) > -1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -358,3 +358,12 @@ axios.get('/user', {
|
|||||||
});
|
});
|
||||||
|
|
||||||
source.cancel('Operation has been canceled.');
|
source.cancel('Operation has been canceled.');
|
||||||
|
|
||||||
|
// AxiosError
|
||||||
|
|
||||||
|
axios.get('/user')
|
||||||
|
.catch((error) => {
|
||||||
|
if (axios.isAxiosError(error)) {
|
||||||
|
const axiosError: AxiosError = error;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user