返回对象内的函数时JSDoc参数描述不显示,如何解决?
解决JSDoc无法识别对象属性中函数参数类型的问题
当你把函数作为对象属性返回时,JSDoc默认无法自动关联函数的原有类型注解,导致参数显示为ANY。可以通过显式标注对象的类型结构来解决这个问题,下面提供两种可行方案:
方案1:直接给返回对象添加@type注解
在IIFE的返回语句前,用@type标注返回对象的结构,明确style属性下border函数的类型:
var GDL = (function () { //border default let border_style = ["solid"] let border_width = [2] let border_color = "black" let border_radius = 0 //style functions /** * Add border style to canvas. Array are 1 [all], 2 [sides, top and bottom] or 4 [left, top, right, bottom] long * @param {[String]} style * @param {[Number]} width * @param {string} color * @param {Number} borderRadius */ function border(style = border_style, width = border_width, color = border_color, borderRadius = border_radius){ } const style = {border} /** * @type {{ * style: { * border: (style?: [String], width?: [Number], color?: string, borderRadius?: Number) => void * } * }} */ return {style} })() let f = GDL f.style.border()
方案2:用@typedef预定义类型(更适合复杂结构)
先定义样式对象的类型,再给返回值标注该类型,代码可读性更好:
/** * @typedef {Object} StyleModule * @property {function([String], [Number], string, Number): void} border - 给画布添加边框样式,数组长度支持1/2/4种情况 */ var GDL = (function () { //border default let border_style = ["solid"] let border_width = [2] let border_color = "black" let border_radius = 0 //style functions /** * Add border style to canvas. Array are 1 [all], 2 [sides, top and bottom] or 4 [left, top, right, bottom] long * @param {[String]} style * @param {[Number]} width * @param {string} color * @param {Number} borderRadius */ function border(style = border_style, width = border_width, color = border_color, borderRadius = border_radius){ } const style = {border} /** @type {{style: StyleModule}} */ return {style} })() let f = GDL f.style.border()
这两种方法都能让JSDoc正确识别border函数的参数类型,本质是通过显式类型声明,让JSDoc建立起对象属性和函数原有注解的关联。
内容的提问来源于stack exchange,提问作者Masa
相关产品推荐
相关产品推荐

