如何将jsdoc与工厂功能一起使用?

时间:2018-02-23 13:30:56

标签: jsdoc jsdoc3

所以我有一个导出工厂功能的模块。工厂函数接受设置并返回绑定在该设置对象上的lib。我不能为我的生活弄清楚如何用jsdocs记录这个;我一直在玩命名空间,typedef和memberof,直到我的脑袋旋转。无论我做什么,它都不会将函数列为库定义的一部分。帮助

如果我完全删除了成员,我可以让它们显示为全局函数,但到目前为止我没有尝试过任何东西使它们显示为成员函数

示例代码:

/**
 * @namespace ServerControl
 */
/**
 * @typedef {Object} Library
 */

/**
 * Factory function that constructs a lib
 * @param {*} settings Settings for constructing a lib
 * @param {*} rancher The rancher library to be used by the lib
 * @returns {ServerControl~Library} The lib
 */
module.exports = function(settings, rancher) {
    return {
        /**
         * Evacuate a host
         * @memberof {...ServerControl~Library}
         * @method evacuate
         * @param {String} name The name of the host to evacuate
         * @returns {Promise} A promise that fulfills when the evacuation is done
         */
        evacuate: name => {
            const server = settings.servers.filter(item => item.display === name)[0];
            return rancher.evacuateHost(server.host, server.env);
        }
        // [more methods snipped]
    }

1 个答案:

答案 0 :(得分:0)

我有一个问题,即我的模块总是公开工厂功能或功能图。我总是在模块包装器外部使用@typedef。这样,我可以在IDEA 中完成代码,并且可以生成漂亮的HTML文档。

Here the generated documentation对于此示例:

/** @namespace SharedLib */

/**
 * @typedef SharedLib.PriorityQueueFactory
 * @function
 * @template T
 * @param {function(T, T): Boolean} comparator Comparison function like for <code>Array.prototype.sort</code>
 * @return {{pop: function(Array<T>): Array<Array<T>| T>, push: function(Array<T>, T): Array<T>}} an object containing the functions to manage the queue
 */

// UMD wrapper - sorry!
(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        define([], factory);
    }
    else if (typeof module === 'object' && module.exports) {
        module.exports = factory();
    }
    else {
        root.returnExports = factory();
    }
}(typeof self !== 'undefined' ? self : this,
    function () {

        /** @type {SharedLib.PriorityQueueFactory} */
        function priorityQueueFactory(comparator) {
            // ...
    return priorityQueueFactory;
}));