首页 > 解决方案 > 使用 @ts-check 在 JS 文件中键入断言元素

问题描述

我有一个带有// @ts-check指令的 JS 文件,使用 JSDoc 注释来表示类型。

问题是从document.

所以我们在 HTML 中:

<input id="myInput">...

当我在 JS 中获取此元素时,类型检查会引发错误:

// @ts-check
const myInput = document.getElementById('myInput');
myInput.value = 'foobar';

“HTMLElement”类型上不存在属性“值”

如果我使用 JSDoc 注释指定预期类型,@type那么也会引发错误:

// @ts-check

/** @type {HTMLInputElement} */
const myInput = document.getElementById('myInput');
myInput.value = 'foobar';

类型“HTMLElement”不可分配给类型“HTMLInputElement”。
“HTMLElement”类型中缺少属性“accept”。

如果我在 TS,我可以document.getElementById('myInput') as HTMLInputElement用来告诉它我期待这种类型。

我如何在 JS 中执行此操作@ts-check

标签: javascripttypescriptjsdocts-check

解决方案


对此的解决方法是将@type声明放在变量和检索之间,并添加().

像这样:

// @ts-check

const myInput = /** @type {HTMLInputElement} */ (document.getElementById('myInput'));
myInput.value = 'foobar';

这种语法相当笨拙和可怕,但他们已经关闭了这个错误,所以我猜上面的语法是处理这个问题的官方方法。


推荐阅读