2015-09-26 50 views
2

我有一個JavaScript方法需要一個迭代器,即遵循the es6 iterable protocol的任何對象。我想在它的JSDoc中註釋這個。我如何參考'可迭代'類型?ES6迭代器的JSDoc類型名稱

/** 
* @param {__WHAT_GOES_HERE__?} iterable 
*/ 
function consume(iterable) { ... } 

我可以寫出來的JSDoc整個協議,但這樣做有點令人難以置信...笨拙:

* @param { 
* { 
*  Symbol.iterator: function(): { 
*  next: function() : { 
*   value: T|undefined, 
*   done: boolean 
*  } 
*  } 
* } 
* } iterable 

此外,工具似乎並不明白Symbol.iterator手段。

+1

我通常只是把'Iterable。 '或其他類型,但是我們實際上並沒有從JSDocs中生成文檔。 – loganfsmyth

+0

@loganfsmyth我使用webstorm,它根據註釋做了一些基本的類型警告。當我只是說謊的時候,它會抱怨。 –

+0

@Strilanc:你使用的是什麼類型的系統?你可以在那裏聲明接口嗎? – Bergi

回答

0

我目前的解決方法是用適當的方法定義IterableIterator類。我將這些類放在編輯器可見的位置,但實際上並未使用,因此linter可以看到這些定義,但它們在實際輸出中不包括在內。

然後,在接收/返回序列的方法的JSDoc中,我可以參考Iterable<T>Iterator<T>