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

问题描述 投票:2回答:5

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

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

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;

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

javascript jquery typescript
5个回答
4
投票

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

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

enter image description here

enter image description here


1
投票

jquery.TypeScript.DefinitelyTyped 3.0。

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

Best solution:

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

More

  • 检查您是否使用TypeScript

1
投票

根据jquery.d.ts,以下类型可用于on功能:

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


1
投票

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

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

0
投票

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.