2017-06-21 101 views
0

我們使用Webstorm和JSDoc來提供一些很好的建議功能,並在需要時使用類型文檔。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); 
}; 

一些細節使用他,例如在服務方法的選擇到目前爲止它真正偉大的作品,當我在exports.userDetail方法使用params,它自動提示我們我們可以使用的領域,如果我們想。

問題是「在樹的頂端」。對於詳細例如標準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調用一個錯誤:「參數類型...是不能分配給參數類型用戶」

唯一的解決辦法是命名所有的屬性,否則它說這個。對於其他情況,這個警告真的很有用 - 它發現,如果你把數字字符串或像令牌誤入用戶等。但混合真正的錯誤,這使得它不太可靠。

任何人都有一些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 
*/ 

但是,當我們在很多O方法使用用戶編寫完整的定義,每一次變化就意味着大量的工作在整個應用程序更新(幾乎是不可能的,當它增長到足夠大)

+0

不知道我跟着你...你可以嘗試定義你的屬性爲可選的 - 比如'@property {String} [email]' – lena

+0

@lena:是的,它工作,出於某種原因Webstorm知道{String =}意思是可選的參數但不適用於財產。用[email]回答這個問題,我會接受你:) – libik

回答

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 
    */ 
相關問題