【发布时间】: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 编译器(和 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