【问题标题】:TypeScript implicit any error with SuperagentTypeScript 隐含 Superagent 的任何错误
【发布时间】:2020-05-29 18:22:45
【问题描述】:

我在 TypeScript 项目中使用 superagent 并安装了 @types/superagent,但我看到了一个我不明白的类型错误。鉴于以下...

const myRequest = request
  .get('/path/to/api')
  .end((err, res) => {
    // Do stuff with err and res
  })

errres 出现以下错误: Parameter 'err' implicitly has an 'any' type.ts(7006) Parameter 'res' implicitly has an 'any' type.ts(7006)

但与此同时,TypeScript 似乎确实知道这些变量的类型,因为当我在 VSCode 中将鼠标悬停在它们上时,它会显示来自 @types/superagent 的正确类型,如下图所示。

在图像中,它显示它正确地从@types/superagent 获取res 的类型为request.Response

因此,我不明白为什么会收到这些隐式类型错误。有人可以向 TypeScript 新手解释这一点吗?谢谢:)

【问题讨论】:

  • 其实这不是新手。如果我正确理解你,那真的很奇怪,因为它同时告诉你它知道类型并且不知道类型。只是为了确认一下,那张截图都是一个片段,对吧?不是从不同的地方组装的?另外,如果您将鼠标悬停在.end 上,您会看到什么?
  • 请注意,VSCode 有自己的内置 TypeScript 版本,用于提供内联类型信息。默认情况下,它与磁盘上的不同。您是否尝试过重新启动 VSCode?这将迫使它重新扫描所有导入以获取类型信息。
  • 我相信您在代码中的某处设置了“res:requset.Response”
  • @Mr.AF typescriptlang.org/play/#code/… typescript 应该可以推断出来,不需要重复两次。
  • @Mr.AF 如果您将回调的参数显式键入为any,它仍然会通过,因为这两种函数类型仍然兼容。

标签: typescript visual-studio-code superagent


【解决方案1】:

您没有指定参数的类型。请尝试以下操作:

const myRequest = request
  .get('/path/to/api')
  .end((err, res: request.Response) => {
    // Do stuff with err and res
  })

【讨论】:

  • 这并没有解决原来的问题:“为什么我会收到这些隐式类型错误”
  • 同样res的类型更有可能是API返回的对象类型
猜你喜欢
  • 1970-01-01
  • 2017-07-22
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 2021-03-16
  • 2017-11-16
  • 1970-01-01
相关资源
最近更新 更多