ES6可迭代对象的JSDoc类型名称

JSDoc type name for ES6 iterables

本文关键字:类型 JSDoc 迭代 对象 ES6      更新时间:2023-09-26

我有一个javascript方法,它接受一个可迭代对象,即遵循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的含义。

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

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