javascript - 使用 @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
?
解决方案
对此的解决方法是将@type
声明放在变量和检索之间,并添加()
.
像这样:
// @ts-check
const myInput = /** @type {HTMLInputElement} */ (document.getElementById('myInput'));
myInput.value = 'foobar';
这种语法相当笨拙和可怕,但他们已经关闭了这个错误,所以我猜上面的语法是处理这个问题的官方方法。
推荐阅读
- javascript - 无法使用socket.io在nodejs中向客户端发送消息
- elasticsearch - Kafka Connect 使用(json)消息中的字段将主题持久化到 Elasticsearch 索引
- python - 使用 pdfminer 从 pdf 中读取目录
- android - 如何使用 Kotlin 将 ArrayList 数据保存到 Firebase?
- php - 无法将 SQL 服务器身份验证与 PHP 共同连接
- vb.net - 在 VB.Net 中访问 Word 的嵌套表?
- html - 如何像 Facebook 的专辑帖子一样布局网格
- java - 优雅创建pojo的设计模式
- python - numpy genfromtxt 转换器不适用于 unicode(Python 3)
- javascript - 在fabric js中缩放时如何保持Rect的圆角