Javascript 类型为'的参数;字符串';不可分配给类型为';{[key:string]:任意;}
当我尝试附加click事件处理程序时,typescript文件出现以下错误,如下所示 类型为“string”的参数不能分配给类型为“string”的参数{ [键:字符串]:任意;} 我在ASP.NET Web应用程序中配置了jQuery 2.1.4和jQuery.TypeScript.DefiniteTypely3.0.4 编辑: 我的typescript文件能够拾取定义文件,如下所示 在我的JQuery.d.ts中,我看到了以下重载Javascript 类型为'的参数;字符串';不可分配给类型为';{[key:string]:任意;},javascript,jquery,typescript,Javascript,Jquery,Typescript,当我尝试附加click事件处理程序时,typescript文件出现以下错误,如下所示 类型为“string”的参数不能分配给类型为“string”的参数{ [键:字符串]:任意;} 我在ASP.NET Web应用程序中配置了jQuery 2.1.4和jQuery.TypeScript.DefiniteTypely3.0.4 编辑: 我的typescript文件能够拾取定义文件,如下所示 在我的JQuery.d.ts中,我看到了以下重载 on(events: string, handler:
on(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;
on(events: string, data : any, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery;
on(events: string, selector: string, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;
on(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;
on(events: { [key: string]: any; }, selector?: string, data?: any): JQuery;
on(events: { [key: string]: any; }, data?: any): JQuery;
我错过了什么?如有任何提示/建议,将不胜感激
jquery.TypeScript.DefinitelyTyped 3.0
请停止对TypeScript类型定义使用nuget
最佳解决方案:
只需下载此文件并将其包含在项目中:
更多
- 检查您是否使用最新的TypeScript
可使用以下类型:
1. on(events: string, selector: string, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;
2. on(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery;
3. on(events: { [key: string]: any; }, selector?: string, data?: any): JQuery;
4. on(events: { [key: string]: any; }, data?: any): JQuery;
现在,由于您正在以以下方式实现该函数
$(this.elementId).on("click", changeEventHandler)
将应用
上第3或第4次键入的,这要求第一个元素的类型为{[key:string]:any;}
。您需要做的是提供一个需要应用单击功能的选择器。以下是您的选择:
$(this.elementId).click(changeEventHandler)
OR
$(document).on("click", this.elementId, changeEventHandler)
您缺少的是,在使用on
函数以及事件类型和事件处理程序时,您还需要指定侦听器要连接到的doElement我遇到了相同的问题。答案和评论中建议的解决方案都没有为我解决问题
事实证明,我的eventHandler的签名没有为第一个参数指定类型JQueryEventObject
,因此没有应用第一个重载
对
jquery.d.ts文件中有一个小问题。jquery.d.ts文件不是“on”,而是“one”(参见下图)。改变这一点解决了问题
已经有了答案:
$("#some-element").on("click", function(event:JQuery.Event) {
// code
}
不久前我遇到过这个问题,如果我没有弄错的话,这是由于jquery.d.ts中on
定义中的重载顺序造成的。基本上,由于定义包括[key:string]:在事件:string
重载之前的任何
重载,因此TypeScript解析器无法找到它。我相信DefinitelyTyped(3.1.1)上定义文件的最新版本已经纠正了这一点。@MikeMcCaughan,谢谢。让我用最新版本试试。我用最新的DefinitelyTyped(3.1.1)试过了,但不适合我。我仍然看到相同的错误。您使用的是什么IDE?可能是IDE没有接受更改。例如,Visual Studio附带了自己版本的jQuery定义。我正在使用Visual Studio 2015 Enterprise出于某种原因,此url在我的工作环境中似乎不起作用。我收到“此站点无法提供安全连接。github.com发送了无效响应。”是否有其他方法下载jquery.d.ts?谢谢$(this.elementId)。单击(changeEventHandler)似乎对我有效。但是,在jquery.d.ts文件中,on函数有6种类型。请查看有问题的编辑部分。是的,但是您调用它的方式,即$(this.elementId)。on(“click”,changeEventHandler)
函数中只有两个参数on
函数,这就是为什么typescript将类型应用于(事件:{[key:string]:any;},data?:any):JQuery代码>到您的函数,因此您的类型不匹配的原因在我的情况下,第一个“on”也有两个参数。。。on(events:string,handler:(eventObject:JQueryEventObject,…args:any[])=>any):JQuery;为什么它没有拾取?我不认为这是正确的-有一个jquery函数one
以及on
上的,这就是这些行的含义。有一个正确的答案: