JSDoc继承参数文档

15

假设我有两个函数,其中一个是另一个的扩展。

/**
* @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);    
}

这两个函数在两个不同的文件中。我是否可以从Base函数继承参数文档到Foo函数中,或者必须把文档写两遍?

我尝试将settings定义为@typedef,如下所示:

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

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

但这只是链接到全局类型定义,并且我想要参数记录在与函数相同的页面上。但是这是否可能,在不重复编写文档的情况下实现?


它到底没有继承哪里?你目前得到了什么? - SGD
在使用 Docstrap 创建文档时,Foo 函数中的 settings 参数既没有描述,也没有链接到 Base 中的 settings 参数。 - LongInt
你是否正在使用任何模块或类似的东西,还是那些确实是顶级符号?你获取了什么文档,并且您得到了哪些?参数不会被描述是可以预料的,但类型应该被链接。 - SGD
不是模块 - 在我的代码中,它们属于同一个命名空间,例如bar.Base和bar.Foo。但是你的意思是,未描述的参数是预期的?那么,这就是我的问题的答案。我猜这不是jsdoc可以做到的。 - LongInt
有人找到关于这个的信息吗? - Pavlo Zhukov
2个回答

3

我认为这无法完成。您可以像在问题中那样通过@typedef对其进行文档化,但它只会将类型链接到其定义。我不知道有一种内联定义类型的方法。


0

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

/** 
 * @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 declare)一起使用它,您可以在函数调用中使用一个对象字面量进行派生。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接