JSDoc继承参数文档

JSDoc inheriting parameter documentation

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

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

但这只是链接到全局类型定义,我希望参数与函数记录在同一页面上。但是,如果不编写两次文档,这甚至可能吗?

我不认为这是可以做到的。您可以像在您的问题中那样通过 @typedef 对其进行记录,但它只会 link 其定义的类型。我不知道内联定义类型的方法。

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

/** 
 * @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 声明)结合使用,您可以在函数调用中使用对象文字进行派生

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