如何使用JSDoc定义可递归嵌套的对象结构?
解决JSDoc递归嵌套对象类型的文档编写问题
你不需要定义类,用JSDoc的@typedef就能轻松实现递归类型的文档标注,具体步骤如下:
先通过
@typedef定义递归类型
先用@typedef声明你的对象类型,在类型内部可以直接引用自身来实现嵌套结构:/** * @typedef Person * @type {object} * @property {string} firstName - 人员的名 * @property {string} lastName - 人员的姓 * @property {Person[]} children - 嵌套的子级人员数组 */在函数参数中引用该类型
定义好类型后,直接在@param里使用这个类型名即可:/** * 处理嵌套人员数据的函数 * @param {Person} person - 任意深度嵌套的人员对象 */ function handlePerson(person) { // 函数逻辑 }
为什么你之前的写法不生效?
你直接在对象字面量类型中引用person时,这个名称还未被定义,JSDoc无法识别。而通过@typedef提前声明类型后,类型名就可以在自身的属性定义中递归引用,完美适配任意深度的嵌套结构。
适配你实际场景的修改
针对你实际的嵌套项目符号文本对象,只需要修改@typedef的名称和属性字段即可,比如:
/** * @typedef BulletItem * @type {object} * @property {string} text - 项目符号文本内容 * @property {BulletItem[]} subItems - 嵌套的子项目数组 */
内容的提问来源于stack exchange,提问作者devinrbopp
相关产品推荐
相关产品推荐

