http中定义类型,没有搞懂

来源:10-6 对axios进行二次封装处理

小雨点3545254

2023-11-14

interface Data {
  [index: string]: unknown
}
interface Http {
  get: (url: string, data?: Data, config?: AxiosRequestConfig) => Promise<AxiosResponse>
  post: (url: string, data?: Data, config?: AxiosRequestConfig) => Promise<AxiosResponse>
  put: (url: string, data?: Data, config?: AxiosRequestConfig) => Promise<AxiosResponse>
  patch: (url: string, data?: Data, config?: AxiosRequestConfig) => Promise<AxiosResponse>
  delete: (url: string, data?: Data, config?: AxiosRequestConfig) => Promise<AxiosResponse>
}
const http: Http = {
  get(url, data, config) {
    return instance.get(url, {
      params: data,
      ...config
    })
  },
  post(url, data, config) {
    return instance.post(url, data, config)
  },
  put(url, data, config) {
    return instance.put(url, data, config)
  },
  patch(url, data, config) {
    return instance.patch(url, data, config)
  },
  delete(url, data, config) {
    return instance.delete(url, {
      data,
      ...config
    })
  }
}

老师,视频中这段代码什么意思,视频讲的太快了,没有听懂,能详细的讲解一下吗,
还有定义接口(interface Http)中有很多重复代码,怎么优化一下,能详细的讲解一下和优化吗

写回答

1回答

西门老舅

2023-11-15

你好,当我们调用 http.get()、http.post() 等方法的时候,需要传递参数,那么就需要对传递的参数进行TS的类型限制,interface Http 就是起到这个作用的。

如何优化?可以使用instance.request()来替代instance.get()、instance.post()等方法。

举例如下:

interface Http {

  request(method: string, url: string, data?: Record<string, unknown>, config?: AxiosRequestConfig): Promise<AxiosResponse>;

}


const http: Http = {

  async request(method, url, data, config) {

    return instance.request({

      method,

      url,

      data,

      ...config,

    });

  },

};


0
0

Vue3 + React18 + TS4入门到实战 系统学习3大热门技术

专为初级前端人员设计,系统性学习三大技术

261 学习 · 182 问题

查看课程