如何用JSDoc注释带属性与带参方法的JavaScript对象?
正确为对象添加JSDoc注释的方法
你之前的写法问题在于,在typedef里把set定义成了普通Function,而且@param没有关联到set方法上,导致编辑器无法识别它是带参数的方法。下面是两种可行的修正方案:
方案一:修正typedef的类型定义(适合需要复用类型的场景)
可以直接在@property里指定方法的完整签名,或者用@callback拆分方法类型,让JSDoc正确识别方法和参数:
写法1:直接指定方法签名
/** * 包含属性和set方法的对象类型 * @typedef {Object} ObjectName * @property {number} property - 对象的数值属性 * @property {(value: number) => void} set - 设置property的方法,接收一个数值参数 */ /** * ObjectName类型的实例 * @type {ObjectName} */ const objectName = { property: 0, set(value) { this.property = value; } };
写法2:用@callback拆分方法类型(更清晰)
/** * 设置property的方法类型 * @callback SetPropertyCallback * @param {number} value - 要设置的属性值 * @returns {void} */ /** * 包含属性和set方法的对象类型 * @typedef {Object} ObjectName * @property {number} property - 对象的数值属性 * @property {SetPropertyCallback} set - 设置property的方法 */ /** * ObjectName类型的实例 * @type {ObjectName} */ const objectName = { property: 0, set(value) { this.property = value; } };
方案二:直接在实例方法上添加注释(无需复用类型时用)
如果不需要复用这个对象类型,直接在对象的属性和方法上写JSDoc,编辑器也能正确识别:
const objectName = { /** * 对象的数值属性 * @type {number} */ property: 0, /** * 设置property的数值 * @param {number} value - 要设置的属性值 * @returns {void} */ set(value) { this.property = value; } };
这样修改后,编辑器就能正确识别set是方法,并显示它的参数信息了。
内容的提问来源于stack exchange,提问作者rickydickydodahgrimes
相关产品推荐
相关产品推荐

