4-2、axios函数重载

因为我们要实现

axios(url, comfig)
axios(comfig)

这2种请求方式,所以我们需要对request方法进行重载。

request(url: string | AxiosRequestConfig, config?: AxiosRequestConfig): AxiosPromise {
    config = config || {}
    if (typeof url === 'string') {
      config.url = url
    } else {
      config = url
    }
    return dispatchRequest(config)
  }

src/types/index.ts

interface AxiosInstance extends Axios {
  (config: AxiosRequestConfig): AxiosPromise
  (url: string, config?: AxiosRequestConfig): AxiosPromise
}
编写demo
axios('/api/extend/post', {
  method: 'post',
  data: {
    msg: 'hi1'
  }
})

axios.request({
  url: '/api/extend/post',
  method: 'post',
  data: {
    msg: 'hello'
  }
})

至此,我们实现了axios函数的重载。另外,官方axios支持一种能力,我们可以去定义返回数据的类型,并在请求的时候制定该类型,然后在响应数据中我们就可以获取到该类型。接下来我们就来实现这个feature。

你可能感兴趣的:(4-2、axios函数重载)