请问老师为什么不会报错

来源:7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写

hy_wang

2020-11-07

请问下老师,这章节我有一个小疑问。

关于如果调用axios.request(config),这是我仅仅传入了一个参数。

AxiosInstance 这个interface规定了request接受一个参数没错,但是

http://img.mukewang.com/szimg/5fa67382091cbc9f10200224.jpg

这段逻辑,new Axios这个类返回context实例中,存在一个request原型方法,这时request方法在类中定义的是接受两个any参数。可是createInstance方法返回的AxiosInstance类型定义上要求原型上的request只有一个config参数。

简单描述就是说返回的instance这个实例,是AxiosInstance类型。AxiosInstance类型定义原型上的request仅接受一个参数。而context实例上的request方法确实上接受两个参数。

这是类上的request方法参数定义,只接受一个config参数且要求AxiosRequestConfig类型。

http://img1.sycdn.imooc.com/szimg/5fa6751609f1e79a11860456.jpg

这是interface中的request方法定义。

http://img.mukewang.com/szimg/5fa674720939722110380140.jpg

这时TS为什么不会报错,明明参数个数对不上以及参数类型也对不上。




写回答

3回答

ustbhuangyi

2020-11-07

虽然是两个参数,但是注意第一个是 any,第二个也是 any,而且第二个还是可选参数,说明可以是任意类型的一个参数,也可以是任意类型的两个参数,所以这种定义是匹配类型定义的。

0
5
hy_wang
非常感谢!
2020-11-09
共5条回复

hy_wang

提问者

2020-11-07

//img.mukewang.com/szimg/5fa6855a09f48cfd17021302.jpg

老师这是我的理解

0
0

hy_wang

提问者

2020-11-07

//img.mukewang.com/szimg/5fa67a22096c084212861014.jpg

老师我仍然认为本身request类型定义一个参数,但是类中的原型request方法有两个参数定义。那么就会报错,但是因为课程中return的时候进行了断言所以就不会报错。

0
1
ustbhuangyi
你这个例子,这样定义 const obj = { get(a: any, b?: any) { return 'a' } } 就不报错了
2020-11-09
共1条回复

下一代前端开发语言 TypeScript从零重构axios

课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!

2629 学习 · 877 问题

查看课程