触发器点击在Typescript中 - 属性'click'在'Element'类型上不存在

Flo*_*ris 22 javascript typescript reactjs

我想在Typescript/Reactjs中的HTML元素上触发click事件.

let element: Element = document.getElementsByClassName('btn')[0];
element.click();
Run Code Online (Sandbox Code Playgroud)

上面的代码确实有效.但是我收到了一个Typescript错误:

ERROR in [at-loader] ./src/App.tsx:124:17
TS2339: Property 'click' does not exist on type 'Element'.
Run Code Online (Sandbox Code Playgroud)

那么这样做的正确方法是什么?

Sur*_*yan 53

使用HTMLElement类型而不是Element.HTMLElement继承自Element.在文档中,您可以找到该click函数在HTMLElement中定义.

通过将您的元素转换为HTMLElement

let element: HTMLElement = document.getElementsByClassName('btn')[0] as HTMLElement;
element.click();
Run Code Online (Sandbox Code Playgroud)

  • Nope:[at-loader]中的错误./src/Game.tsx:123:13 TS2322:类型'元素'不能分配给'HTMLElement'类型."元素"类型中缺少属性"accessKey". (3认同)
  • 甚至是“HTMLButtonElement”(如果您知道它是“<button/>”) (2认同)
  • 使用强制转换运算符`document.getElementsByClassName('btn')[0]作为HTMLElement` (2认同)
  • 打字稿有时就是这么垃圾 (2认同)

小智 18

document
  .querySelectorAll<HTMLElement>('.ant-table-row-expand-icon')
  .forEach(node => node.click())
Run Code Online (Sandbox Code Playgroud)


fo_*_*fo_ 10

正确(类型安全)方式是:

if (element instanceof HTMLElement) {
  element.click();
}
Run Code Online (Sandbox Code Playgroud)

除非您真的需要它们,否则您不应该使用强制转换(如其他答案所建议的那样)。