打字稿: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和你自己开心!
在接受事件数据的 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和你自己开心!