使用 @yields
JSDoc 标签会很好。
我们与JS和JSDoc一起工作,但利用TSC和VSCode。
我们还使用 valid-jsdoc eslint规则。
我们有:
/** @typedef Thing (...) */
function* walkThings() {
//... some yield here and there
}
我们想要的:
/**
* @yields {Thing}
*/
function* walkThings() {
//... some yield here and there
}
我们不能做的:
/**
* @returns {IterableIterator<Something>}
*/
function* walkThings() {
//... some yield here and there
}
因为它不支持 return
,而是支持 yield
,而且eslint对此发出了抱怨。我们可以在这里禁用该规则,但这不是理想的情况。
6条答案
按热度按时间mkshixfv1#
在这里补充一下,听起来像是ESLint那边的bug。
uujelgoq2#
在这里插一句,听起来这也是ESLint的问题。
我对@DanielRosenwasser的说法不太有信心:
return
和yield
在句法层面上具有不同的含义。IterableIterator<T>
是实现细节,代码没有返回可迭代的迭代器,也不是开发者编写的。只是多个yield
。IterableIterator
的标准文档,所以我不指望eslint能知道它。只是好奇:它从哪里来?是TypeScript生成器的内部定义吗?liwlm1x93#
这是TypeScript生成器的内部定义吗?
它是一个接口(嗯,suite of them),定义了生成器或
IterableIterator
规范对象的形状:pw9qyyiw4#
感谢@weswigham的回复。我已经注意到了(这就是为什么我在JSDoc部分使用它的原因)。我想了解是否有类似
HTMLElement
的标准定义方式,或者这是否是TypeScript开发者为了模拟可迭代迭代器示例而制定的定义(考虑到PromiseLike<T>
)。无论如何,你解决了我的问题,再次感谢!
r7xajy2e5#
原始评论中的
eslint
规则现已弃用,但 https://github.com/gajus/eslint-plugin-jsdoc 可以与@yield
一起满足(至少在推荐的规则集中)。Typescript 需要@return
。两者都可以使用,但这并不理想:我在JSDoc中使用了TS语法,所以我禁用了
"jsdoc/valid-types"
。除此之外,eslint是满意的。编辑:Intellisense(TS)也将其解析得很好。
工具提示文档错误已在此提交:microsoft/vscode#164888
编辑2:我认为我应该使用
Generator<T>
而不是Iterator<T>
。ekqde3dh6#
我认为我应该使用
Generator<T>
而不是Iterator<T>
。看起来是这样。在我的设备上就是这样的。
然后
[...module.forEachWarehouse()].filter((wh) => …)
可以正确推断类型。