当参数无法推断类型时,如何在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
相关产品推荐
相关产品推荐

