“string”类型的参数不能分配给类型为“{[key:string]:any;}的参数

时间:2016-09-21 20:40:00

标签: javascript jquery typescript

当我尝试附加点击事件处理程序时,我在typescript文件上收到以下错误,如下所示,

  

类型'string'的参数不能分配给'{类型的参数   [键:字符串]:任何;}

enter image description here

我在ASP.NET Web应用程序中配置了jQuery 2.1.4和jquery.TypeScript.DefinitelyTyped 3.0.4。

编辑:

我的打字稿文件能够拾取定义文件,如下所示,

enter image description here

在我的JQuery.d.ts中,我看到以下重载,

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;

我错过了什么?任何提示/建议将不胜感激。

5 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。答案和评论中没有提出的解决方案确实为我解决了这个问题。

原来我的eventHandler的签名为第一个参数指定了类型JQueryEventObject,因此没有应用第一个重载。

enter image description here

enter image description here

答案 1 :(得分:1)

  

jquery.TypeScript.DefinitelyTyped 3.0。

请停止将nuget用于TypeScript类型定义。

最佳解决方案:

只需下载并在您的项目中加入此文件:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/jquery/jquery.d.ts

更多

  • 检查您是否使用TypeScript最新版

答案 2 :(得分:1)

根据jquery.d.tson功能可以使用以下类型:

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)

on的第3或第4次输入将被应用,这需要第一个元素为{ [key: string]: any; }类型。您需要做的是提供一个需要应用click函数的选择器。所以这是你的选择:

$(this.elementId).click(changeEventHandler)
OR
$(document).on("click", this.elementId, changeEventHandler)

您缺少的是当使用on函数以及事件类型和事件处理程序时,您还需要指定要附加侦听器的DOMElement

答案 3 :(得分:1)

https://stackoverflow.com/questions/46862920已有答案:

$("#some-element").on("click", function(event:JQuery.Event) {
     // code
}

答案 4 :(得分:0)

jquery.d.ts文件中存在一个小问题。 jquery.d.ts文件没有' on'而不是'一个' (见下图)。改变这一点解决了问题。

enter image description here