2017-07-14 33 views
1

我想用JSDoc來描述curVal如何描述傳遞匿名函數的參數?

我在arrays.every()之前嘗試了@param,並在匿名回調中,但它並沒有幫助PhpStorm解決方法。

/** 
* @param {Array} curVal 
*/ 
arrays.every(function (curVal) { 
    /** 
    * @param {Array} curVal 
    */  
    curVal.??? 
}); 

我需要它的舒適,我只是想輕鬆地在IDE的自動完成Array.prototype方法訪問對象curVal

回答

1

我不知道PhpStorm有多聰明(the docs表示它認可Closure Compiler tags and type annotations),但我可以想到兩種可能的解決方案。

首先是直接告訴它的函數參數的時類型:

arrays.every(/** @param {Array} curVal */ function (curVal) { 
    // ... 
}); 

或(關閉編譯器內嵌樣式):

arrays.every(function (/** Array */ curVal) { 
    // ... 
}); 

其次,這如果PhpStorm是聰明只會工作足以知道Array.prototype.every的回調如何得到它的參數,是爲了確保它知道arrays是一個數組數組:

/** @type {Array.<Array>} */ 
var arrays = getArrays(); 

或者:

var arrays = /** Array.<Array> */ getArrays(); 
+0

這真是太棒了,我嘗試了所有的命題,並且我第一次和第二次完美地工作。我需要仔細檢查,因爲PhpStorm似乎有某種緩存,而當我刪除第一個類型註釋時,IDE記得它是Array。然後我將其更改爲Object,然後再次將第二個選項更改爲Array。謝謝! – Marecky

1

我覺得你最好的(和最清晰的)選擇是給函數的名稱,例如

/** 
* @type {Number[]} 
*/ 
var array = [ 1, 2, 3 ]; 

/** 
* @param {Number} curVal 
*/ 
var fn = function (curVal) { 
    // operate on curVal 
}; 
array.forEach(fn); 

我想你應該(也許是必須)指定數組類型,因爲在我的例子,不是不只是{Array},我不知道你的arrays.every的意思,但我假設你的意思是使用來自Array對象的.forEach

[編輯]

好了,現在我明白了,也許這樣的事情是你想要什麼:

/** 
* @param {Array} curVal 
*/ 
var fn = function (curVal) { 
    curVal. // press Ctrl-Space here, and autocompletion will work 
}; 

但是,如果你真的想用jsdoc與匿名函數,東西這樣就可以了(並且是最接近的代碼在你的問題):

var arrayOfArrays = [[1,2,3], [2,3,4]] 
arrayOfArrays.every(/** @param {Array} curVal */function (curVal) { 
    curVal. // press Ctrl-Space here, and autocompletion will work 
}); 

(我使用JetBrains公司的IntelliJ,不是他們PhpStorm IDE,但他們共享相同的Javascript集成)

+0

對不起,我猜誤解你的問題。 – Lambart

相關問題