【问题标题】:Return type from Axios in TypeScript is incorrect when using await/async使用等待/异步时,TypeScript 中 Axios 的返回类型不正确
【发布时间】:2021-02-06 14:24:06
【问题描述】:

更新:这不是 Axios 或 TypeScript 的问题,而是一些奇怪的 IDE 配置问题。从头开始重新创建环境和 .idea 文件夹使其消失。

在将 Axios 与 TypeScript 一起使用时,使用 async/await 运算符(相对于 Promise)似乎会使 TypeScript 推断的类型不正确。例如做:

let res = await Axios.get<Case[]>('/stack');
console.log(res);

我希望 res 的返回类型是 AxiosResponse 然而 TypeScript 将类型推断为简单的 Case[] 登录到控制台,我可以确认响应确实是一个 AxiosResponse 对象,其数据属性的类型为 Case[]

TypeScript 编译器(和 IDE)将返回类型解释为一个 Case 对象数组

请注意,如果我改用 Promise,则行为符合预期(即使用 .then 和 .finally 而不是 await)

更新:所以在人们说这没有发生在他们身上之后,我尝试重新创建项目,有趣的是这个问题没有发生:

但是,我仍然不知道在其他项目中发生了什么。请注意,它与 IDE 无关,因为它也会在 VS Code 中发生。我试图彻底清除 node_modules、包锁、节点缓存并重新安装所有内容,但它继续发生。两个项目中的 TypeScript 和 Axios 版本相同。

【问题讨论】:

  • 根据the type definition,get 方法确实应该返回一个响应对象的承诺,这就是我在等待Axios.get 时得到的类型。你能给个minimal reproducible example吗?另请注意,您可能不应该在该方法之外公开传输层,即 AxiosResponse 不应该是您代码的其他部分知道的内容。
  • 您的代码按预期工作in the typescript playground
  • 为简单起见,该示例被剥离。我实际上只想检查 AxiosResponse 的状态码。如果这不容易重现,那么我怀疑这是一些环境错误。我将尝试创建一个新环境并查看。感谢操场上的例子。
  • 好的,我从头开始重新创建项目,问题就消失了。超级诡异。我会尝试找出原因,但那不是 Axios 或 TS 的问题。谢谢

标签: typescript vue.js axios


【解决方案1】:

对于遇到此问题的其他人,我尝试了一千种方法,最后使用 IDE 创建的 .idea 目录出现问题。我不确定具体是什么,但删除整个 .idea 文件夹并重新加载项目修复了所有问题。很奇怪。

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 2016-10-14
    • 2020-03-13
    • 2020-09-10
    • 2017-06-04
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    相关资源
    最近更新 更多