请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么接口AxiosRequestConfig中timeout要限定为number类型?

老师您好,我理解,axios的config参数是用户填写的,没法保证带入的timeout为number类型,而我们却在接口AxiosRequestConfig中限定timeout为number,这也就是说,相当于我们已经在后续的处理逻辑中,默认用户填写的就是number类型。

那如果用户带入的timeout就是不规范的,比如:“1000”,“1000ms”,甚至"akjshdaj",那不会发生错误么?

我们是否应该指定timeout为 timeout?: any,然后根据用户带入的config.timeout进行类型判断,如果是"1000"或"1000ms"这种的就转换成1000,如果是NaN就抛出错误或者警告。

下面是老师在教程中写的源码:

export interface AxiosRequestConfig {
  // ...
  timeout?: number
}
const { /*...*/ timeout } = config

if (timeout) {
  request.timeout = timeout
}

request.ontimeout = function handleTimeout() {
  reject(new Error(`Timeout of ${timeout} ms exceeded`))
}

正在回答 回答被采纳积分+3

1回答

ustbhuangyi 2021-03-25 11:15:02

timeout 是开发者传的啊,也就是 axios 的使用者传的,那么当然应该限制类型为 Number 了,避免传一个非法的类型呀。

0 回复 有任何疑惑可以回复我~
  • 提问者 FDirector #1
    但是,如果axios的使用者并没有遵循规范,带入一个随便写的字符串,那我们的axios工具库岂不是没有对这种错误作出合适的处理?
    回复 有任何疑惑可以回复我~ 2021-03-25 11:18:45
  • ustbhuangyi 回复 提问者 FDirector #2
    如果是 TS 的使用者,那么直接就会报错,如果不是 TS 的,是会报错,但报错是很常见的情况,你总不可能对用户每一种输入都做运行时的类型检查,像 timeout 这种属性,写成其它类型的可能性比较小,我觉得没必要加运行时的检查。
    回复 有任何疑惑可以回复我~ 2021-03-26 10:14:30
  • 提问者 FDirector 回复 ustbhuangyi #3
    明白了,非常感谢!
    回复 有任何疑惑可以回复我~ 2021-03-27 23:18:38
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信