Visual studio code 如何在vscode中使用jsdoc正确获取包装函数中返回值的推断类型?
以下是一些代码(简化),以便更好地理解: 发送请求的包装器Visual studio code 如何在vscode中使用jsdoc正确获取包装函数中返回值的推断类型?,visual-studio-code,types,jsdoc,Visual Studio Code,Types,Jsdoc,以下是一些代码(简化),以便更好地理解: 发送请求的包装器 它在发送请求和完成请求时执行一些常见的操作 它返回请求的结果(处理程序) 异步函数请求(处理程序){ //普通的东西 试一试{ 常量结果=等待处理程序() 返回结果| | true } 捕捉(错误){ doSomethingWithError(错误) 返回错误 } 最后{ //普通的东西 } } /** *设想一个简单的服务/api客户机 */ 常量someApiClient={ /** *@returns{Promise}3个首字
- 它在发送请求和完成请求时执行一些常见的操作
- 它返回请求的结果(处理程序)
any
我们在vscode中得到了什么
如果我们按照vscode拾取的类型进行操作,我们可以看到它正在“一点一点地丢失类型”,直到什么都没有了
VS代码确实尝试根据函数参数的使用情况推断函数参数的类型。一个简单的例子是: 函数foo(a){ 返回a.b; } foo({b:3}) 这导致
foo
具有签名函数foo(a:any):any
。您的代码是这个限制的一个更复杂的例子
修复方法是在请求上显式注释参数类型
:
/**
*@T模板
*@param{()=>Promise}处理程序
*@return{Promise}
*/
异步函数请求(处理程序){
...
}
在这种特定情况下,我们还需要显式的@返回值
,因为catch块不返回类型为T
的值(它返回any
,因为错误是非类型化的)
如果写入了请求
,则可以省略@返回
:
/**
*@T模板
*@param{()=>Promise}处理程序
*/
异步函数请求(处理程序){
//普通的东西
常量结果=等待处理程序()
返回结果
}
因为VS代码可以推断函数的返回类型(但请记住,显式类型在许多情况下非常有用,特别是对于可能返回多个不同类型的函数)
添加显式键入后,result
应具有正确的类型:
看起来不错!但是这里的关键点是
@template T
注释。我在jsdoc文档中没有看到它。它似乎是一个typescript
相关标签?我可以在这里找到它:看到了吗