Typescript 财产';元素';在具有HTMLFormElement的类型联合上不存在

Typescript 财产';元素';在具有HTMLFormElement的类型联合上不存在,typescript,union-types,Typescript,Union Types,尝试对表单.elements对象进行分解时出现此错误 类型“HtmleElement | HTMLFormElement”上不存在属性“elements”。 类型“HtmleElement”上不存在属性“elements”。 // in a class domRefs: {[key: string]: HTMLFormElement | HTMLElement | null} = { myForm: null } onButtonClick = () => { const {a

尝试对
表单.elements
对象进行分解时出现此错误

类型“HtmleElement | HTMLFormElement”上不存在属性“elements”。 类型“HtmleElement”上不存在属性“elements”。

// in a class

domRefs: {[key: string]: HTMLFormElement | HTMLElement | null} = {
  myForm: null
}

onButtonClick = () => {
  const {a, b, c} = this.domRefs.myForm!.elements
}
我在前面指定了
HTMLFormElement
,它的类型也比
HTMLElement
更具体,为什么不能正确识别它


使用
HTMLFormElement&HTMLElement
确实适用于这种特殊情况,但这是正确的处理方法吗?

如果您的元素类型是使用联合类型定义的,要访问typescript中元素的特定于类型的属性,您应该首先检查元素类型

if (this.domRefs.myForm instanceof HTMLFormElement) {
    // Your code specific for HTMLFormElement here
}
“使用HTMLFormElement&HTMLElement”以这种方式告诉编译器,您的元素具有这两种类型中定义的所有特性。但在您的情况下,这是完全无用的,因为HTMLFormElement扩展了HTMLElement,并且它已经具有了所有的特性

附言:更多关于你可以阅读的类型