Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

522
Vistas
¿Cómo usar el interceptor Axios con mecanografiado correctamente?

He creado un interceptor axios:

 instance.interceptors.response.use(async (response) => { return response.data; }, (err) => { return Promise.reject(err); });

que obtiene la response y devuelve la propiedad data .

El objeto de response es del tipo AxiosResponse<any, any> y la propiedad data son solo los datos del tipo AxiosResponse<any, any>.data .

El problema es que cuando uso este cliente axios

 const instance = axios.create({...}); // ...etc // add interceptor

Entonces lo hago:

 customAxiosClient.get().then((data: /* here data is of type AxiosResponse instead of AxiosResponse.data */)

¿Cómo resolver esto?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Solo tiene que especificar el tipo de datos de respuesta en el método de obtención de axios, así:

 axios.get<never, YourDataType>(...)
about 4 years ago · Juan Pablo Isaza Denunciar

0

La respuesta de Rechu funciona, pero voy a ofrecer una alternativa.

Puede crear una función reutilizable para mantener su instancia de axios global. Lo uso yo mismo en producción.

En primer lugar, cree una carpeta/archivo llamado utils/http.ts en su proyecto. A continuación, esta es mi función reutilizable para mantener todo en un solo lugar.

 import axiosClient from "axios"; import type { AxiosRequestConfig } from "axios"; /** * Creates an initial 'axios' instance with custom settings. */ const instance = axiosClient.create({ headers: { Accept: "application/json", "Content-Type": "application/json; charset=utf-8", }, }); /** * Handle all responses. It is possible to add handlers * for requests, but it is omitted here for brevity. */ instance.interceptors.response.use( (res) => res.data, (err) => { if (err.response) { return Promise.reject(err.response.data); } if (err.request) { return Promise.reject(err.request); } return Promise.reject(err.message); } ); /** * Replaces main `axios` instance with the custom-one. * * @param cfg - Axios configuration object. * @returns A promise object of a response of the HTTP request with the 'data' object already * destructured. */ const axios = <T>(cfg: AxiosRequestConfig) => instance.request<any, T>(cfg); export default axios;

Finalmente, utilícelo como el siguiente fragmento de código:

 const login = () => { const creds = { username: "user", password: "pass" }; axios<User>({ method: "POST", url: "/api/v1/auth/login", data: creds }) .then((user) => { /* do whatever with user here */ }) .catch((err) => { /* handle errors */); };

Será mecanografiado y listo para su uso inmediato. La función any in axios se puede sustituir por unknown .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda