老师,请教一下axios源码的泛型问题

来源:2-17 声明文件 第一部分

追风之神

2022-07-28

http://img.mukewang.com/szimg/62e1757c09d583c714630455.jpg

后面的语句我看的懂,就是参数类型是(string,config),返回是Promise的类型

(url: string, config?: AxiosRequestConfig<D>): Promise<R>

但是我前面框起来的部分的泛型,没看懂,这里的T,R,D分别指代的什么。看着不像方法的参数或者返回值。

写回答

1回答

张轩

2022-07-28

同学你好

这个类型需要深究下去的,你现在理解起来有可能稍微困难点,但是没关系,我简单说下,你看到的三个泛型 T R D,和我们接触的泛型功能是一样的,接受个性化的定制,也就是在 get 调用的时候传入用户可能想定制的类型,特别注意这三个都有默认值,所以不传入也没事。那么这三个类型流入哪里了呢? 

config接受了一个 D,最后返回接受一个 R。

所以当你使用 get 的时候,比如

const res = await get(url, config)
// 这个 res 会自动获取类型,是 R 类型的,假如你想自定义什么返回的数据结构,它都会联想出来。
再举例
interface MyResp {
    name: string
}
const res = await get<MyResp>(url, config)
这个时候 res.data 就是 MyResp 类型,方便你下一步操作。
config 同理。

其实就是千方百计的想让所有的数据结构都获得类型,可以自动补全和修正错误。

1
0

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3166 学习 · 2346 问题

查看课程