我有类似的代码:
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的类型系统我期望哪种类型?
答案 0 :(得分:1)
您可以为此使用jsdoc cast:
// @ts-check
(/** @type {NodeListOf<HTMLElement>} */ (document.querySelectorAll('.thing'))).forEach(el => el.style.color = 'red');
请注意,您必须将强制转换((document.querySelectorAll('.thing')
)的目标包装在括号中,以便类型适用于正确的表达式。