JSDoc - 部分创建的类型定义

时间:2017-06-21 15:05:47

标签: javascript node.js documentation webstorm jsdoc

我们正在使用Webstorm和JSDoc提供一些很好的建议功能,并在需要时使用类型文档。

例如,这是User的定义,在应用程序中多次使用。

/**
     * Basic user object
     * @typedef {Object} User
     * @property {!Number} id - Unique identitifaction
     * @property {!String} email - Email and username in once
     * @property {!Boolean} enabled - True, if user can access the system
     * @property {!Boolean} confirmed - True, if validation (i.e. through email) was successfull
     *
     * @property {?String} name - Name of user
     */

然后我们可以在服务方法中使用他来选择用户的一些细节

/**
 * return Detail of user
 * @param {User} params
 * @param {Options=} options
 * @returns Promise.<User>
 */
exports.userDetail = (params, options = {}) => {
    return userRepository.userDetail(params, options);
};

到目前为止,它的效果非常好,当我在params方法中使用exports.userDetail时,它会根据需要自动提供我们可以使用的字段。

问题是&#34;在树的顶部&#34;。例如,详细的标准CRUD操作是使用此方法并仅通过id

进行选择
/**
 * @param {Number} req.userId
 */
exports.detail = (req, res, next) => {
    return userService.userDetail({id: req.userId}).then(user => {
        res.out = user;
        return next();
    }).catch(next);
};

但是在此部分{id: req.userId},webstorm会调用错误:&#39;参数类型...无法分配给参数类型用户&#39;

唯一的解决方案是命名所有属性,否则它会说明这一点。对于其他情况,这个警告确实很有帮助 - 它会发现,如果你把数字放入字符串中或者像错误的那样将令牌写入用户等。但是将真正的错误与这个错误混合使得它不太可靠。

任何人都有一些关于JSDoc或Webstorm的提示吗?我没有找到方法如何说&#34;即使没有所有字段,这个参数也是用户,并非所有字段都是必需的&#34;。

另一方面,我想在整个应用程序中共享一个模型 - 我可以在每个函数上编写完整的定义,这是正常工作

/**
 * Register standard user
 * @param {String} _params.email Unique email for registration, used also instead of username
 * @param {String} _params.password Password for your account
 * @param {Options=} options
 */

但是当我们在很多方法中使用User时,每次更改都意味着需要在整个应用程序中更新它(当它变得足够大时几乎不可能)

1 个答案:

答案 0 :(得分:1)

您可以尝试将属性定义为可选属性,例如

/**
     * Basic user object
     * @typedef {Object} User
     * @property {!Number} id - Unique identitifaction
     * @property {!String} [email] - Email and username in once
     * @property {!Boolean} [enabled] - True, if user can access the system
     * @property {!Boolean} [confirmed] - True, if validation (i.e. through email) was successfull
     *
     * @property {?String} name - Name of user
     */