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

返回对象内的函数时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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:32:42