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

如何用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,提问作者Анар Лятифов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:58:05