Javascript JSDoc-包含部分创建的类型定义

Javascript JSDoc-包含部分创建的类型定义,javascript,node.js,documentation,webstorm,jsdoc,Javascript,Node.js,Documentation,Webstorm,Jsdoc,我们使用Webstorm和JSDoc提供一些不错的建议功能,并在需要时提供类型文档 例如,这是用户的定义,在整个应用程序中使用多次 /** * Basic user object * @typedef {Object} User * @property {!Number} id - Unique identitifaction * @property {!String} email - Email and username in once * @

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

例如,这是用户的定义,在整个应用程序中使用多次

/**
     * 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);
};
然而,在这一部分,
{id:req.userId}
webstorm调用了一个错误:“参数类型。。。不可分配给参数类型用户的

唯一的解决方案是命名所有属性,否则它会这样说。对于其他情况,此警告非常有用-它会发现,如果您错误地将数字输入字符串或类似令牌的内容输入到用户中,等等。但是,将实际错误与此错误混合在一起会降低可靠性

有人对JSDoc或Webstorm有一些一般性的建议吗?我没有找到一种方式来说“这个参数是用户,即使没有所有字段,也不是所有字段都是必需的”

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

/**
 * 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时,每次更改都意味着在整个应用程序中需要进行大量的更新工作(当它变得足够大时,几乎是不可能的)

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

/**
     * 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
     */

我不知道我是否了解你。。。您可以尝试将属性定义为可选的,比如
@property{String}[email]
@lena:是的,它起作用了,因为Webstorm知道{String=}对param来说是可选的,但对property来说不是。用[电子邮件]回答这个问题,我会接受你:)
/**
     * 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
     */