【发布时间】:2020-11-05 19:17:59
【问题描述】:
我有一个如下所示的自定义事件监听器钩子:
const useEventListener = (
eventName: string,
handler: ({key} : KeyboardEvent) => void,
) => {
const savedHandler = useRef<({key} : KeyboardEvent) => void>(handler)
useEffect(() => {
savedHandler.current = handler
}, [handler])
useEffect(() => {
const eventListener = (event: KeyboardEvent) => savedHandler.current(event)
window.addEventListener(eventName, eventListener);
return () => {
window.removeEventListener(eventName, eventListener)
}
}, [eventName])
}
这是抛出错误,
TS error: Type 'event' is missing the following properties from type 'keyboardevent': char, key and 18 others
我是否输入了错误的 useRef?我也无法从 here 找到任何工作。不知道我在这里做错了什么。
【问题讨论】:
-
您的
eventListener需要KeyboardEvent,但您将它与addEventListener签名一起使用,该签名采用string作为事件名称,并且侦听器键入(e: Event) => void。无法保证它会为您提供KeyboardEvent,而这正是您的听众所需要的。 -
我认为
eventName不应该是任何string,这应该是一个特定的监听器字符串...
标签: javascript reactjs typescript react-hooks