ES6 可迭代的 JSDoc 类型名称

Posted

技术标签:

【中文标题】ES6 可迭代的 JSDoc 类型名称【英文标题】:JSDoc type name for ES6 iterables 【发布时间】:2015-12-24 08:06:43 【问题描述】:

我有一个 javascript 方法,它接受一个可迭代的,即 the es6 iterable protocol 之后的任何对象。我想在其 JSDoc 中对此进行注释。如何引用“可迭代”类型?

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

我可以在 JSDoc 中写出整个协议,但这有点……难以置信的笨拙:

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

另外,工具似乎无法理解 Symbol.iterator 的含义。

【问题讨论】:

我通常只输入Iterable.<number> 或任何类型,但我们实际上并没有从 JSDocs 生成文档。 @loganfsmyth 我使用 webstorm,它会根据注释进行一些基本的类型警告。当我只是对类型撒谎时,它会抱怨。 @Strilanc:你使用的是什么类型的系统?你可以在那里声明接口吗? @Bergi 这个问题是指 JSDoc,但我的具体情况是“WebStorm 内置的任何东西”。可能是现有标准的一些临时组合,包括 JSDoc 和 Closure 的类型注释。 【参考方案1】:

我当前的解决方案是使用适当的方法定义IterableIterator 类。我将类放在编辑器可见但未实际使用的位置,因此 linter 可以看到定义,但它们不会作为膨胀包含在实际输出中。

那么,在接受/返回序列的方法的JSDoc中,我可以参考Iterable<T>Iterator<T>

【讨论】:

以上是关于ES6 可迭代的 JSDoc 类型名称的主要内容,如果未能解决你的问题,请参考以下文章

将数组转换为 ES6 可迭代

JS中的 ES6新类型iterable

使用 JSDoc 给 js 项目添加类型注释

ES6 扩展运算符

JsDoc:将参数类型定义为来自外部模块的类型

JsDoc:将参数类型定义为来自外部模块的类型