在接受eventData的TypeScript中,jQuery onclick-event的预期处理程序是什么样的?
没有eventData的处理程序可以像这样定义:
let onClick(event: JQuery.Event): void
可以像这样注册:
$("#btn").click(onClick);
这样注册时,它在my test fiddle中工作正常:
$("#btn").click("data3", onClick);
但是我的IDE抱怨道:
错误TS2345(TS)类型'(事件:事件)=>任何'的参数不能分配给'EventHandler |类型的参数EventHandlerBase>” . 输入'(event:Event)=> any'不能赋值为'EventHandlerBase>' . 参数'event'和't'的类型不兼容 . “事件”类型不能指定为“事件”类型 . 类型'“data3”'不能分配给'null'类型 .
我理解在第一种情况下(没有eventData),处理程序的类型是:
JQuery.EventHandler<TElement>
在第二种情况下(使用eventData):
JQuery.EventHandler<TElement, TData>
其中 TData
是eventData的类型(在我的示例中为字符串) . 但是如何使用有效且类型安全的TypeScript语法声明这样的事件处理程序?
1 回答
只需将事件目标和事件数据的类型添加为事件的通用属性:
对于fiddle它没什么区别,但它会让IDE和你自己开心!