You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JSDoc从函数返回值推断并分配类型?

获取异步函数返回类型(不调用函数)

你遇到的问题其实是没用到TypeScript/JSDoc标准的类型工具函数,咱们可以用ReturnType结合typeof来实现不调用函数就能获取返回类型,甚至还能解析异步函数返回的Promise内部类型,具体方法如下:

核心方案:用ReturnType<typeof 函数名>获取返回类型

因为你的函数是异步函数,它的直接返回值是一个Promise,所以分两种场景处理:

1. 获取Promise类型的返回值

如果需要的是函数本身返回的Promise类型,可以直接用:

/** @type {ReturnType<typeof getFood>} */
let foodPromise;

此时foodPromise的类型会被推断为Promise<{fruit: string; qty: number;}>,和你调用getFood()得到的类型完全一致,但不会执行函数。

2. 获取Promise解析后的实际数据类型

如果想要的是Promise最终resolve的对象类型(也就是你手动写的{fruit: string, qty: number}),可以用Awaited工具类型来解析Promise:

/** @type {Awaited<ReturnType<typeof getFood>>} */
let foodData;

这样foodData的类型就是{fruit: string; qty: number;},完全自动推断,不用手动写类型。

完整示例代码

async function getFood(){
  const food = await {fruit: 'banana', qty: 3}
  return food
}

// 场景1:获取Promise类型
/** @type {ReturnType<typeof getFood>} */
let foodPromise; // 类型:Promise<{fruit: string; qty: number;}>

// 场景2:获取Promise解析后的实际类型
/** @type {Awaited<ReturnType<typeof getFood>>} */
let foodData; // 类型:{fruit: string; qty: number;}

为什么之前的方法不行?

你用的returnOf不是标准的类型工具,TypeScript/JSDoc里没有这个内置类型,而ReturnType是官方提供的用来提取函数返回类型的工具,配合typeof getFood来获取函数的类型,就能准确拿到它的返回值类型。

另外要确保你的VSCode已经开启了JavaScript的类型检查(可以在项目根目录创建jsconfig.json,添加"checkJs": true配置),这样VSCode就能正确识别这些类型工具并给出类型提示。

内容的提问来源于stack exchange,提问作者JakeDK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:23:14