typescript - “元素”类型的参数不能分配给“HTMLElement”类型的参数
问题描述
const labelEl: HTMLElement = document.createElement('label')
const isElOfNeededType = (el: HTMLElement): boolean =>
["INPUT", "TEXTAREA"].includes(el.tagName);
let result
if (isElOfNeededType(labelEl.nextElementSibling)) {
result = true
}
这是我的游乐场:链接
- 为什么我会收到此错误
labelEl.nextElementSibling
?“元素”类型的参数不能分配给“HTMLElement”类型的参数
不HTMLElement
延长Element
?
2.(不是很重要,但如果能解释一下会很高兴)为什么 TS playground 抱怨[ ].includes
我已经设置了Config -> Target = esnext
?
解决方案
labelEl.nextElementSibling
是类型Element
。请参阅绝对类型中的定义。所以你的代码试图传递一个需要的Element
地方HTMLElement
。
正如您所说,HTMLElement
extends Element
,但这确实意味着您可以传递 anElement
来代替 an HTMLElement
,因为 theElement
可能没有 an 所具有的属性HTMLElement
。但是,您可以传递 anHTMLElement
预期的位置Element
,因为 anHTMLElement
将具有 an 的所有属性Element
。
看到您只对tagName
存在于上的属性感兴趣,Element
我只需将您的代码更改为使用Element
.
const labelEl: HTMLElement = document.createElement('label')
const isElOfNeededType = (el: Element): boolean =>
["INPUT", "TEXTAREA"].includes(el.tagName);
let result
if (isElOfNeededType(labelEl.nextElementSibling)) {
result = true
}
推荐阅读
- amazon-web-services - AWS Quicksight KPI 比率
- python - 多处理模块 OpenCV 应用程序(Blank Camera Feed)
- sql - 如何使用 SQL 计算所有 NULL 值,没有列名?
- json - 我如何将表单组数据存储到角度 12 的 json 文件中
- reactjs - React 组件重新渲染
- python - 尝试在使用命令时让机器人记录一些东西 discord.py
- python - 具有多个输入和目标的 TensorFlow 数据集
- javascript - React:为什么运行 .html 文件后没有输出?
- delphi - 传递带有“const”的 DLL 函数参数是否等同于指针?
- javascript - AngularCLI 中的继承模板