axios: 0.27.1
typescript: 4.1.5

request.ts

import axios, { AxiosResponse, AxiosRequestConfig } from 'axios';
const service = axios.create({
//  baseURL,timeout
// 一些axios的基础配置,如baseUrl、超时时间等
});

// 拦截器的配置按照自己的需求来,不做赘述,网上可以找到各种成熟的方案
service.interceptors.request.use()
service.interceptors.response.use() 

// 定义服务端接口返回的接口格式,其中data是主要数据
type Response<T = any> = {
  massage?: string;
  code: number;
  data: T;
};


export default <T>(config: AxiosRequestConfig) => {
  return new Promise<Response<T>>((res, rej) => {
    service
      .request<Response<T>>(config)
      .then((response) => {
        res(response.data);
      })
      .catch((err: any) => {
        rej(err);
      });
  });
};
// 定义一个导出方法,用此处的泛型T来进行接口数据类型的定义,因为在axios实例上有request函数可以传入泛型
//如下图

在这里插入图片描述

定义接口数据类型

import request from './request';

interface LIST {
  id: number;
  name: string;
}
const url = '/list';
request<LIST>({
  url
}).then((res)=> {
  res.data.id
})

编辑器已经有了返回数据字段的提示
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐