TypeScript HTMLFormControlsCollection namedItem should return only form input elements

u4dcyp6a  于 4个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(54)

TypeScript版本: 3.9.2
搜索词: HTMLFormControlsCollection RadioNodeList namedItem
代码

declare const form: HTMLFormElement;

const element = form.elements.namedItem('foo')

if (element && !(element instanceof RadioNodeList)) {
  console.log('eee', element.value) // <<< Property 'value' does not exist on type 'Element'
}

预期行为: 根据 MDN,namedItem()HTMLFormControlsCollection 上只返回一组特定的元素类型。

  • HTMLFormControlsCollection 应该继承自 HTMLCollectionOf<HTMLButtonElement | HTMLFieldSetElement | HTMLInputElement | HTMLObjectElement | HTMLOutputElement | HTMLSelectElement | HTMLTextAreaElement>
  • HTMLFormControlsCollection.namedItem() 应该返回 RadioNodeList | HTMLButtonElement | HTMLFieldSetElement | HTMLInputElement | HTMLObjectElement | HTMLOutputElement | HTMLSelectElement | HTMLTextAreaElement | null
  • RadioNodeList 应该继承自 NodeListOf<HTMLButtonElement | HTMLFieldSetElement | HTMLInputElement | HTMLObjectElement | HTMLOutputElement | HTMLSelectElement | HTMLTextAreaElement>
    实际行为:HTMLFormControlsCollection.namedItem() 的返回类型不够具体( Element )。
    ** playground链接:**https://www.typescriptlang.org/play/?ssl=7&ssc=2&pln=1&pc=1#code/CYUwxgNghgTiAEYD2A7AzgF3gMyTAtgFzwASAKgLIAyAYnvgKIQj4goYDcAUF8uliGat28ALw56AOkEs2GNJJRRWwAJIYWACgDkuJNoCUPAJbZ4mmcKwAya-ACEFoXPjH+UFGBBIzAJSjAxkgAckigVMaYBgbwAN5c8IioaEjMkhBIAOY6ILnaADTwlnKSAG5QEACuIEYAvlxAA
    相关问题:#19437
gupuwyp2

gupuwyp21#

HTMLFormControlsCollection can also contain form-associated custom elements.

eni9jsuy

eni9jsuy2#

我不确定这是否可行。我们可能会得到 custom form controls
也许这些类型可以在接口中声明,该接口可以被增强,例如 HTMLElementTagNameMap

bzzcjhmw

bzzcjhmw3#

解决这个问题。当我尝试访问表单元素的 value 属性时,HTMLFormElement 定义在我的代码中引起了错误的错误。

相关问题