大约在视频5:07左右。
//...
interface PromiseChain<T>{
resolved:Resolved<T> | ((config:AxiosRequestConfig)=>AxiosPromise)
rejected?:RejectedFn
}
//...
const chain: PromiseChain<any>[] = [
{
resolved: dispatchRequest,
rejected: undefined
}
]
如上,在写chain的时候,当时还没定这里给它一个什么类型,老师说
“这里可能是AxiosRequest,也可能是AxiosPromise,所以这里写为any类型”
我猜想老师想说的应该是
“可能是AxiosRequest,也可能是AxiosResponse”
抛开这个口误不谈,我们在使用拦截器的时候,拦截的对象可能是AxiosRequestConfig类型,也可能是返回的结果AxiosResponse类型,所以我觉得这里写any类型是不是范围太大了。所以我就改成了联合类型的形式
const chain: PromiseChain< AxiosRequestConfig | AxiosResponse >[] = [
{
resolved: dispatchRequest,
rejected: undefined
}
]
this.interceptors.request.forEach(interceptor => {
//这里不会报错
chain.unshift(interceptor)
})
this.interceptors.response.forEach(interceptor => {
// 这里却报错了!!!
chain.push(interceptor)
})
Argument of type 'Interceptor<AxiosResponse<any>>' is not assignable to parameter of type 'PromiseChain<AxiosRequestConfig | AxiosResponse<any>>'.
Types of property 'resolved' are incompatible.
Type 'ResolvedFn<AxiosResponse<any>>' is not assignable to type '((config: AxiosRequestConfig) => AxiosPromise<any>) | ResolvedFn<AxiosRequestConfig | AxiosResponse<any>>'.
Type 'ResolvedFn<AxiosResponse<any>>' is not assignable to type 'ResolvedFn<AxiosRequestConfig | AxiosResponse<any>>'.
Types of parameters 'val' and 'val' are incompatible.
Type 'AxiosRequestConfig | AxiosResponse<any>' is not assignable to type 'AxiosResponse<any>'.
Type 'AxiosRequestConfig' is not assignable to type 'AxiosResponse<any>'.ts(2345)
希望老师解答下这个错误。