JS创建存储类的对象字典时如何保留原类文档与智能提示
问题描述
定义带JSDoc文档注释的listView类后,将其存入普通字典对象,代码如下:
/** Handles list models */ class listView{} const views = { list: listView }
此时访问字典的list属性时,既不会展示关联的原始文档注释,也无法触发对应的IntelliSense智能提示。已知可行方案是直接在对象内部定义类、重复书写注释:
const views = { /** Handles list models */ list: class{ } }
寻求无需复制原有注释内容,即可让对象属性关联对应类文档说明的实现方案。
可用解决方案
不需要重复书写注释,通过类型标注即可让IntelliSense自动追溯原始类的文档信息,以下是不同场景下的实现方式:
- 纯JavaScript场景:使用JSDoc显式标注对象的类型结构,通过
typeof引用原始类类型
标注后编辑器会自动识别/** Handles list models */ class listView{} /** @type {{ list: typeof listView }} */ const views = { list: listView }views.list对应listView类,直接拉取类上的原始注释,后续修改类的注释时所有引用位置的提示会自动同步,无需手动维护多处注释。 - 批量管理多视图场景:可以通过
@typedef提前统一定义视图字典的类型结构,一次定义即可复用/** Handles list models */ class listView{} /** Handles detail page models */ class detailView{} /** * @typedef {Object} ViewMap * @property {typeof listView} list 列表视图 * @property {typeof detailView} detail 详情视图 */ /** @type {ViewMap} */ const views = { list: listView, detail: detailView } - TypeScript场景:使用
satisfies运算符做类型校验,既可以保证对象符合视图字典的通用结构,又不会丢失每个属性的精确类型引用,自动关联原始注释/** Handles list models */ class listView{} // 定义通用视图字典类型 type BaseViewMap = Record<string, new (...args: any[]) => any> const views = { list: listView } satisfies BaseViewMap
你提到的对象内联类+重复注释的方案,仅适合类不需要在对象外单独复用的场景;如果类需要多处引用,上述类型标注方案维护成本更低,不会出现注释多端不一致的问题。
内容的提问来源于stack exchange,提问作者Khaled
相关产品推荐
相关产品推荐

