typescript - 如何找出库回调的打字稿签名?
问题描述
我正在制作一个使用 JavaScriptrequest
库的 Typescript 应用程序。在 github 上,我没有看到 Typescript 的实现,但是,@types/request
我已经安装了一个包。
我不确定如何处理这些类型。request()
接受回调,但第三方库通常记录的函数签名在哪里?
我很困惑,因为似乎我可以在回调中使用我想要的任何类型,并且我的代码工作正常:
request("https://example.com", (response: bogusType, html: bogusType) => {
// No errors.
}
所以我的问题是三个部分:
如果一个库只在 JavaScript 中实现,我应该只使用
object
这些参数的类型吗?如果是这样,
@types/request
模块的意义何在?这些天库是用打字稿和javascript实现的吗?我是否需要寻找 Typescript 版本的库才能获得正确的源代码和文档?
谢谢!
解决方案
假设您已正确安装和导入,并且您在对 的调用中@types/request
“跳转到定义” ,您应该会看到以下调用签名突出显示:request
request(...)
@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; }
,那么你应该得到一个错误。
推荐阅读
- javascript - REACT找不到图像模块
- php - 如何仅访问 php 对象索引
- javascript - Microsoft Graph api - 将文件写入我的 oneDrive
- python - 每当我运行需要 aiohttp 库的代码时出错
- amazon-web-services - 如何将 dynamodb 中新添加的数据传输到 s3 存储桶?
- apache - 当我更改源文件时,为什么我的 localhost 不再更新?
- vba - 循环查找文件夹中具有特定名称的最后修改文件
- python-3.x - TypeError: '<=' 在 'str' 和 'int' 的实例之间不支持,尽管我将 str 转换为 int
- model - 如何在 libgdx 中首先缩放然后旋转模型实例
- flutter - Flutter - 每次我重新打开小部件时,TextField 都是空的