2016-02-01 56 views
0

一個如何使用@param暗示的可選 PARAM用於function這是一個屬性(this.selectedPage()以及使用@type提示其返回類型?JSDoc:組合(可選)@參數和@type爲吸氣/ setter函數的屬性

藉此例如(this.selectedPage()可以通過傳遞一個參數接收尋呼並通過使無返回一個):

/** 
* @type {function(): Page} 
*/ 
this.selectedPage = ko.observable(data.page); 

類型-typehint是很好拾取由IDE,並允許自動完成this.selectedPage()產生Page的事實。

但是,請注意this.selectedPage()需要一個參數 - 即一個頁面。否則,IDE會抱怨該函數在嘗試傳遞一個參數時允許使用0個參數。

所以我結合兩種:

/** 
* @type {function(Page): Page} 
*/ 
this.selectedPage = ko.observable(data.page); 

這似乎從試圖傳遞一個參數時抱怨阻止IDE,但現在它的時候路過一人抱怨。我試過@type {function(undefined|Page): Page}無濟於事。

該函數是一個getter/setter - 那麼如何告訴docblock @param是可選的?

+0

是否有你不使用'@ returns'作爲返回類型的原因? –

+0

因爲它沒有成功,因爲它是一個屬性。即@return適用於function(){},但不適用於this.func = func();.除非它應該和IDE是一個問題。 – JDR

回答

0

對了,在閱讀了各種網站上的JSDoc規範後,我現在遇到了Google的Closure Compiler語法,它實現了我一直在嘗試做的事情 - IntelliJ/PHPStorm也可以正確地獲取它。

從本質上講,可選的參數可以與=爲後綴:

/** 
* @type {function(Page=): Page} 
*/ 
this.selectedPage = ko.observable(data.page); 

還是比較令人費解的例子:

/** 
* @type {function(Array.<Page>=): Array.<Page>} 
*/ 
this.pages = ko.observableArray(); 

這不正是我想要的:文件生成器和IDE承認this.selectedPage()的返回值和this.pages()發出的任何項目實際上都是Page類型,它們本身的所有屬性都已被識別(自Page類型也是這樣記錄的)。

同樣,我相信,這個表示法也應該正確地記錄可以作爲參數傳遞的(可選)類型。