我有类似的代码:

document.querySelectorAll('.thing').forEach(el => el.style.color = 'red');


VsCode中的类型提示系统将el.style标记为Element中缺少。我可以通过以下方法解决此问题:

/** @type {NodeListOf<HTMLElement>} */
const things = document.querySelectorAll('.thing');
things.forEach(el => el.style.color = 'red');


创建var仅仅是为了使VsCode的类型系统保持满意状态似乎是错误的。

如果我使用打字稿,我想我可以

document.querySelectorAll<HTMLElement>('.thing') // etc...


有没有办法告诉VsCode的类型系统我希望从通用方法中获得哪种类型?

最佳答案

您可以为此使用jsdoc cast



// @ts-check
(/** @type {NodeListOf<HTMLElement>} */ (document.querySelectorAll('.thing'))).forEach(el => el.style.color = 'red');


请注意,必须将转换对象((document.querySelectorAll('.thing'))的目标包装在括号中,以便类型适用于正确的表达式。

关于javascript - 使用jsdoc批注,如何在调用时指定通用函数输出的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56062478/

10-11 14:13
查看更多