如何用JSDoc正确定义返回对象的动态键名?
解决方法:使用泛型定义键值类型
要让编辑器能自动提示返回对象的具体属性,需要用**泛型(JSDoc或TypeScript语法)**约束键和值的类型,让工具能根据传入的实参推断出具体的键名。
修改后的JSDoc写法代码如下:
/** * 创建包含指定键值对的对象 * @template {string} K * @template V * @param {K} key 要设置的对象键名 * @param {V} value 对应键名的值 * @returns {{ [P in K]: V }} 返回包含指定键值对的对象 */ const set = (key, value) => { return {[key]: value} } const myObj = set("country", "USA") myObj. // 现在会自动提示.country属性
原写法无效的原因
你之前的@returns {{[key]: typeof value}}中,key仅被定义为宽泛的string类型,编辑器无法识别它是具体的字符串字面量(比如"country"),因此无法提供精准的属性提示。
泛型的作用
@template {string} K:定义泛型K并约束为字符串类型,实际调用时会被推断为传入的具体键名字面量(比如"country")。@template V:定义泛型V代表值的类型,自动匹配传入值的类型(比如这里的"USA"对应的字符串字面量类型)。@returns {{ [P in K]: V }}:通过映射类型明确返回对象的键是K对应的具体值,值是V类型,让编辑器能准确识别对象属性。
如果你的环境支持TypeScript,直接用TS语法会更简洁:
const set = <K extends string, V>(key: K, value: V): { [P in K]: V } => { return {[key]: value} } const myObj = set("country", "USA") myObj.country // 自动提示,类型为"USA"
内容的提问来源于stack exchange,提问作者Анар Лятифов
相关产品推荐
相关产品推荐

