首页 > 解决方案 > 如何找出库回调的打字稿签名?

问题描述

我正在制作一个使用 JavaScriptrequest库的 Typescript 应用程序。在 github 上,我没有看到 Typescript 的实现,但是,@types/request我已经安装了一个包。

我不确定如何处理这些类型。request()接受回调,但第三方库通常记录的函数签名在哪里?

我很困惑,因为似乎我可以在回调中使用我想要的任何类型,并且我的代码工作正常:

request("https://example.com", (response: bogusType, html: bogusType) => { // No errors. }

所以我的问题是三个部分:

  1. 如果一个库只在 JavaScript 中实现,我应该只使用object这些参数的类型吗?

  2. 如果是这样,@types/request模块的意义何在?

  3. 这些天库是用打字稿和javascript实现的吗?我是否需要寻找 Typescript 版本的库才能获得正确的源代码和文档?

谢谢!

标签: typescript

解决方案


假设您已正确安装和导入,并且您在对 的调用中@types/request“跳转到定义” ,您应该会看到以下调用签名突出显示:requestrequest(...)@types/request/index.d.ts

(uri: string, callback?: RequestCallback): TRequest;

如果您然后跳转到 的定义RequestCallback

type RequestCallback = (error: any, response: Response, body: any) => void;

那是回调签名。您应该对此签名进行完整的类型检查,但请注意其中两个参数具有 type any

为什么您没有收到错误取决于bogusType. 例如,如果bogusType是一个空接口,interface bogusType {}bogusType可以在任何接受两个参数的回调预期的地方使用一个接受两个参数的回调,因为无论两个参数的实际类型如何,它们总是可以转换为bogusType(它没有成员)。如果你定义类似的东西interface bogusType { x: string; },那么你应该得到一个错误。


推荐阅读