Как правильно определить JSDoc для модулей Node.js в случае расширения / наследования на миксинах

У меня есть три модуля Node.js. Один называется user получает наследство от base модуль. handler Модуль взаимодействует с экземпляром user:

Базовый модуль - который становится наследником:

/**
 * Base module
 */
'use strict';
const _ = require("underscore");

module.exports = {

    name: "base",

    /**
     * Extent object helper
     */
    extend: function(child) {
        return _.extend({}, this, child);
    },

    /**
     * Delegate event method
     */
    delegate: function () {
      //some delegate event
    }
};

Пользовательский модуль - как модель:

/**
 * User module
 */
'use strict';
const BaseController = require("./base");

module.exports = BaseController.extend({

    name: "user",

    /**
     * Init function
     */
    init: function() {
    }
});

Обработчик - как контроллер:

/**
 * Handler module
 */
'use strict';
const user = require("./user");

module.exports = {

    name: "handler",

    /**
     * Some action
     */
    someAction: function() {
      user.delegate(); // <-- delegate() is not known as a method of "user"
    }
};

Важная часть в кодах отмечена комментарием // <-- delegate() is not known as a method of "user" потому что его наследует base модуль. Мне очень нравится знать, как создать полный JSDoc для этих модулей, чтобы моя IDE поддерживала автозаполнение моего кода, особенно для user.delegate(), Ответ, который предоставляет все необходимые JSDoc-блоки, был бы отличным!

1 ответ

Вы можете взглянуть на @inheritdoc директива:

/**
 * @classdesc Abstract class representing a network connection.
 * @class
 */
function Connection() {}

/**
 * Open the connection.
 */
Connection.prototype.open = function() {
    // ...
};


/**
 * @classdesc Class representing a socket connection.
 * @class
 * @augments Connection
 */
function Socket() {}

/** @inheritdoc */
Socket.prototype.open = function() {
    // ...
};

Итак, для вашего конкретного случая,

/**
 * @class
 * @augments Base
**/
module.exports = {
  name: 'User'
};
Другие вопросы по тегам