因为我们要实现
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。
网友评论