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

当参数无法推断类型时,如何在JSDoc中指定函数调用的泛型类型

在JSDoc中调用时指定泛型类型的方案

可以实现类似TypeScript的调用时泛型指定需求,以下是两种常用方案:

方案1:依赖TypeScript的JS文件类型检查(推荐)

如果你的项目通过jsconfig.json或tsconfig.json开启了"checkJs": true(让TypeScript检查JavaScript文件),直接用TS风格的泛型调用语法即可:

/**
 * @template T
 * @param {string} str 
 * @returns {T}
 */
function parse(str) {
  return JSON.parse(str)
}

// 调用时直接指定泛型类型
const x = parse<{ name: string; age: number }>('{"name": "Bob", "age": 25}');

此时编辑器会自动识别x的类型为{ name: string; age: number },无需额外注释。

方案2:纯JSDoc语法(不依赖TS检查)

如果不想启用TypeScript的JS检查,可通过@type注释将函数断言为特定泛型实例后再调用:

/**
 * @template T
 * @param {string} str 
 * @returns {T}
 */
function parse(str) {
  return JSON.parse(str)
}

// 先标注泛型实例类型,再执行调用
const x = /** @type {(str: string) => { id: string; value: boolean }} */(parse)('{"id": "abc123", "value": true}');

这种写法通过@type明确指定parse函数的泛型参数类型,调用后变量类型会被正确推断。

也可以用更简洁的注释写法:

const x = parse/** @type {<{ foo: string }>} */('{"foo": "bar"}');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:27:27