在typescript中触发点击 - 类型“元素”上不存在属性“点击”

IT技术 javascript reactjs typescript
2021-05-08 03:27:40

我想在 Typescript/Reactjs 中的 HTML 元素上触发点击事件。

let element: Element = document.getElementsByClassName('btn')[0];
element.click();

上面的代码确实有效。但我收到typescript错误:

ERROR in [at-loader] ./src/App.tsx:124:17
TS2339: Property 'click' does not exist on type 'Element'.

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

4个回答

使用类型HTMLElement而不是ElementHTMLElement 继承自 Element。在文档中,您可以发现该click函数是在 HTMLElement 中定义的。

通过以下方式将您的元素投射到 HTMLElement 中

let element: HTMLElement = document.getElementsByClassName('btn')[0] as HTMLElement;
element.click();

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

if (element instanceof HTMLElement) {
  element.click();
}

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

document
  .querySelectorAll<HTMLElement>('.ant-table-row-expand-icon')
  .forEach(node => node.click())

您应该使用ref来访问 DOM。

<button  ref={button => this.buttonElement = button} />
In your event handler:

this.buttonElement.click();// trigger click event

或者,创建 HtmlEvents 并附加到 dom 元素。

var event = document.createEvent("HTMLEvents");
event.initEvent("click", true, true);
var button = document.getElementsByClassName('btn')[0];
button.dispatchEvent(event);