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

如何基于const对象声明JSDoc类型,避免重复修改类型定义?

基于现有const对象直接推导JSDoc类型,避免重复定义

当然可以,完全不需要单独维护typedef和对象的同步,直接利用typeof操作符就能基于对象本身推导类型,下面是几种实用的实现方式:

方式一:直接引用对象的类型

不需要额外定义typedef,直接在函数参数里用keyof typeof options指定键类型:

const options = {
  key1: "val1",
  key2: "val2",
  key3: "val3"
};

/**
 * @param {keyof typeof options} key
 */
function func(key){
  /* ... */
  return 0
}

后续修改options的键集合时,key的参数类型会自动同步,不用手动修改类型定义。

方式二:更严格的字面量类型(可选)

如果需要让键的类型是具体的字符串字面量(比如"key1"|"key2"|"key3")而非宽泛的string,可以用as const断言把对象转为只读字面量类型:

const options = {
  key1: "val1",
  key2: "val2",
  key3: "val3"
} as const;

/**
 * @param {keyof typeof options} key
 */
function func(key){
  /* ... */
  return 0
}

这种方式下编辑器会给出更精准的代码提示,同时禁止修改options的属性值,避免意外改动。

方式三:复用对象类型(可选)

如果还是需要一个命名的类型来复用,可以用@typedef直接引用typeof options:

const options = {
  key1: "val1",
  key2: "val2",
  key3: "val3"
};

/** @typedef {typeof options} optionsType */

/**
 * @param {keyof optionsType} key
 */
function func(key){
  /* ... */
  return 0
}

这样optionsType会自动跟随options的结构变化,不用手动维护类型定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:16:02