Webstorm 9自动完成+ Node.js模块+ JSDoc

时间:2014-12-03 15:50:00

标签: javascript node.js autocomplete webstorm

最近几天我用这个问题绞尽脑汁,但没有设法找到正确的方法。

我试图以Webstorm自动处理并启用自动完成的方式编写我的Node.js模块,但没有运气。

下面是我正在处理的模块的代码(内置Javascript Error对象的简单包装器):

/**
 * @module some-module
 */

'use strict';

var util = require('util');

var httpErrors = {
    /**
     * HTTP status code 400
     *
     * @constructor
     * @name BadRequest
     * @memberOf errors
     */
    400: { name: 'BadRequest', description: 'Invalid data was sent to the server' },

    /**
     * HTTP status code 403
     *
     * @constructor
     * @name Forbidden
     * @memberOf errors
     */
    403: { name: 'Forbidden', description: 'You\'re not allowed to perform such action' }
};

/**
 * @private
 * @constructor
 *
 * @name HttpError
 * @augments WError
 *
 * @param {Number} code
 *
 * @returns {HttpError}
 */
function HttpError (code) {
    this.statusCode = code;

    if (arguments.length < 2)
        Error.call(this, httpErrors[this.statusCode].description);
    else
        Error.apply(this, Array.prototype.slice.call(arguments, 1));

    return this;
}
util.inherits(HttpError, Error);

/**
 * @private
 * @constructor
 *
 * @name E
 *
 * @param {Number} code HTTP status code
 *
 * @returns {HttpError}
 */
function E (code) {
    return HttpError.bind(this, code);
}

/**
 * @constructor
 * @name errors
 */
var errors = {};

Object.keys(httpErrors).forEach(function (errorCode) {
    var error = httpErrors[errorCode];
    errors[error.name] = new E(+errorCode);
});

module.exports = exports = errors;

如何使用它:

var errors = require('./lib');

var err = new errors.BadRequest();

console.log(err.statusCode); // should output 400

问题在于它动态创建了errors个对象,因此Webstorm并没有“提取”对象。但是,我希望使用JSDoc明确声明module.exports对象的属性,使其成为自动完成的属性。我这样做的方式由于某种原因不起作用。

如果您能就如何在这种情况下正确使用JSDoc给我一些建议,我将不胜感激。谢谢。 :)

0 个答案:

没有答案