首页 > 解决方案 > “元素”类型的参数不能分配给“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
}

这是我的游乐场:链接

  1. 为什么我会收到此错误labelEl.nextElementSibling

    “元素”类型的参数不能分配给“HTMLElement”类型的参数

HTMLElement延长Element

2.(不是很重要,但如果能解释一下会很高兴)为什么 TS playground 抱怨[ ].includes我已经设置了Config -> Target = esnext

标签: typescript

解决方案


labelEl.nextElementSibling是类型Element。请参阅绝对类型中的定义。所以你的代码试图传递一个需要的Element地方HTMLElement

正如您所说,HTMLElementextends 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
}

推荐阅读