关于泛型检查
来源:8-4 -4 拦截器的设计与实现 - demo 编写

许愿瓶啊
2020-08-19
拦截器每一个元素的reslove方法如下:
interface PromiseChain<T> {
resolved: ResolvedFn<T> | ((config: AxiosRequestConfig) => AxiosPromise)
rejected?: RejectedFn
}
export interface ResolvedFn<T> {
(val: T): T | Promise<T>
}
这里的 ResolvedFn 指定了接受和返回的类型必须相同,但实际使用中:
axios.interceptors.response.use(res => {
res.data += '3'
return res.data
})
我返回的是T类型的data类型,我以为ts会报错,但并没有,想问问老师原因是什么?
平时使用中响应拦截器有时候会传入和返回的类型不一致,这里设计成传入和返回的类型一致是不是有点不太合理呢?
写回答
2回答
-
许愿瓶啊
提问者
2020-08-20
这里传入的是T类型 AxiosResponse
resolved函数类型是 ResolvedFn<T> 所以这里返回也应该是 AxiosResponse 类型吧?
032020-08-21 -
ustbhuangyi
2020-08-20
res.data 的类型就是泛型 T
函数的返回值是可以是 T 或者 Promise<T>
类型满足,当然不会报错了。012020-08-20
相似问题