打字稿:jQuery onClick with eventData

TypeScript: jQuery onClick with eventData

在接受事件数据的 TypeScript 中,jQuery onclick 事件的预期处理程序是什么样的?

没有事件数据的处理程序可以这样定义:

let onClick(event: JQuery.Event): void 

可以这样注册:

$("#btn").click(onClick);

像这样注册时,它在 my test fiddle:

中工作正常
$("#btn").click("data3", onClick);

但是我的 IDE 抱怨:

Error TS2345 (TS) Argument of type '(event: Event) => any' is not assignable to parameter of type 'EventHandler | EventHandlerBase>'. Type '(event: Event) => any' is not assignable to type 'EventHandlerBase>'. Types of parameters 'event' and 't' are incompatible. Type 'Event' is not assignable to type 'Event'. Type '"data3"' is not assignable to type 'null'.

我了解到在第一种情况下(没有 eventData),处理程序的类型是:

JQuery.EventHandler<TElement>

在第二种情况下(使用 eventData):

JQuery.EventHandler<TElement, TData>

其中 TData 是事件数据的类型(在我的示例中为字符串)。但是如何使用有效且类型安全的 TypeScript 语法声明这样的事件处理程序?

只需添加事件目标和事件数据的类型作为事件的通用属性:

let onClick(event: JQuery.Event<EventTarget, string>): void 

对于fiddle来说没有区别,但是会让IDE和你自己开心!