【问题标题】:JSDoc inheriting parameter documentationJSDoc 继承参数文档
【发布时间】:2021-05-12 20:52:17
【问题描述】:

假设我有两个函数,一个扩展另一个函数。

/**
* @abstract
* @param {Object} settings
* @param {Number} settings.x
* @param {Number} settings.y
* 
*/
function Base(settings) {
    this.x = settings.x;
    this.y = settings.y;
}

/**
* @extends Base
*/
function Foo(settings) {
    Base.call(this, settings);    
}

这两个函数位于两个单独的文件中。有什么方法可以从我的Foo 函数中的Base 函数继承参数文档,还是我必须编写两次文档?

我尝试将settings 变成@typedef,如下所示:

/**
 * @typedef {Object} BaseSettings
 * @property {Number} x
 * @property {Number} y
 *
 */

/**
* @extends Base
* @param {BaseSettings} settings
*/
function Foo(settings) {
    Base.call(this, settings);    
}

但这只是链接到全局类型定义,我希望将参数记录在与函数相同的页面上。但这是否可能,无需两次编写文档?

【问题讨论】:

  • 到底哪里没有继承?你目前得到了什么?
  • 在Docstrap中创建文档时,Foo函数中的settings参数既没有描述也没有链接到Base中的settings参数。
  • 您是否在使用任何模块或类似的东西,还是那些真正的顶级符号?您是否同时获得记录和得到什么?预计不会描述参数,但应该链接类型
  • 不是模块——在我的代码中,它们是同一个命名空间的一部分,例如 bar.Base 和 bar.Foo。但是您是说,未描述的参数是预期的吗?那么,这就是我的问题的答案。我想这不是 jsdoc 可以做到的。
  • 有没有人发现这个问题?

标签: jsdoc


【解决方案1】:

我不认为这是可以做到的。您可以通过@typedef 将其记录在您的问题中,但它只会将类型链接到其定义。我不知道内联定义类型的方法。

【讨论】:

    【解决方案2】:

    有一种内联定义子类的方法,但我认为它在这种特殊情况下没有帮助。无论如何,也许它可以帮助其他人:

    /** 
     * @defines my.class
     */
    function MyClass () {};
    
    var mySubType = /** @lends my.class.prototype */{
        attribute: test
    }
    
    var result = myWhateverFunction(myVar, /** @lends my.class.prototype */{ subattr: 1 }) {
       return true;
    }
    

    这实际上应该适用于任何对象字面量场景。我们将它与功能驱动的对象继承框架(旧版 dojo 1.10 声明)结合使用,您可以在函数调用中使用对象字面量进行派生

    这样我们可以正确地记录继承。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-23
      • 2013-06-12
      • 2016-08-23
      • 1970-01-01
      • 2018-03-12
      • 2017-02-07
      • 2011-03-03
      • 2016-06-17
      相关资源
      最近更新 更多