我正在尝试做这件事
document.addEventListener('click', (e: MouseEvent) => { ...
然而,Typescript无法根据事件名称确定确切的事件类型。
'click'
=> MouseEvent
并且认为e
的类型是Event
类型。这就是定义中的情况。
declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
interface EventListener {
(evt: Event): void;
}
interface EventListenerObject {
handleEvent(evt: Event): void;
}
显然它抱怨
TS2345:'(e: MouseEvent) => void'的类型参数不能赋值给类型参数'EventListenerOrEventListenerObject'。 类型'(e: MouseEvent) => void'不能分配给类型'EventListener'。 参数'e'和'evt'的类型不兼容。 类型'Event'缺少类型'MouseEvent'的以下属性:altKey,button,buttons,clientX和25个更多。
我如何告诉TypeScript,e
是MouseEvent
类型?或者更一般地说:如何正确为addEventListener
编写类型?
document
上添加了它 https://github.com/Microsoft/TypeScript/blob/b145eaf160e6b2729aaacb89856bc2346f85ac4c/lib/lib.dom.d.ts#L4571 然而,由于它在Element
上尚未实现,所以最佳答案似乎是顶部的答案。谢谢! - simPod