2015-09-26 69 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>