Reactjs &引用;没有与此调用匹配的重载“;对于removeEventListener和addEventListener
我有一个keydown处理函数,定义如下:Reactjs &引用;没有与此调用匹配的重载“;对于removeEventListener和addEventListener,reactjs,typescript,dom-events,typescript-typings,Reactjs,Typescript,Dom Events,Typescript Typings,我有一个keydown处理函数,定义如下: handleOnKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => { if (key.isEscape(e.key)) { stopEvent(e); this.props.handleClose(e); } } 我得到以下类型脚本错误: 没有与此调用匹配的重载。 重载第1个,共2个,'(键入:“keydown”,侦听器:(
handleOnKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {
if (key.isEscape(e.key)) {
stopEvent(e);
this.props.handleClose(e);
}
}
我得到以下类型脚本错误:
没有与此调用匹配的重载。
重载第1个,共2个,'(键入:“keydown”,侦听器:(this:htmldevelment,ev:KeyboardEvent)=>any,options?:boolean | EventListenerOptions | undefined):void',出现以下错误。
类型为“(e:React.KeyboardEvent)=>void”的参数不能分配给类型为“(this:htmldevelment,ev:KeyboardEvent)=>any”的参数。
参数“e”和“ev”的类型不兼容。
类型“KeyboardEvent”缺少类型“KeyboardEvent”中的以下属性:locale、nativeEvent、isDefaultPrevented、isPropagationStopped、persist
重载2/2’(类型:string,侦听器:EventListenerOrEventListenerObject,options?:boolean | EventListenerOptions | undefined):void’导致以下错误。
类型为“(e:React.KeyboardEvent)=>void”的参数不能分配给类型为“EventListenerOrEventListenerObject”的参数。
类型“(e:React.KeyboardEvent)=>void”不可分配给类型“EventListener”。
参数“e”和“evt”的类型不兼容。
类型“Event”缺少类型“KeyboardEvent”中的以下属性:altKey、charCode、ctrlKey、getModifierState和其他12个.ts(2769)
解决这个问题的办法是什么?这个问题的答案似乎是:
addEventListener
和removeEventListener
的处理程序函数不接受React.KeyboardEvent
作为参数。它需要一个DOM事件。您需要显示将此函数传递给removeEventListener和AddEventListener的位置。但是,错误消息很清楚<代码>类型的参数'(e:React.KeyboardEvent)=>void'不可分配给类型的参数'(this:htmldevelment,ev:KeyboardEvent)=>any.。正如jaromanda所暗示的,该错误使您看起来像是在将事件侦听器分配给不适当的HTML元素。这是否回答了您的问题?有什么解决办法吗?
componentDidMount () {
const { current: modal } = this.modalRef;
if (modal) {
modal.addEventListener('keydown', this.handleOnKeyDown);
}
}
componentWillUnmount () {
const { current: modal } = this.modalRef;
if (modal) {
modal.removeEventListener('keydown', this.handleOnKeyDown);
}
}