使用jsdoc批注,如何在调用时指定通用函数输出的类型

时间:2019-05-09 15:08:50

标签: javascript visual-studio-code jsdoc

我有类似的代码:

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');

仅仅为了使VsCode的类型系统满意而创建一个var似乎是错误的。

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

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

是否可以通过通用方法告诉VsCode的类型系统我期望哪种类型?

1 个答案:

答案 0 :(得分:1)

您可以为此使用jsdoc cast

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

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