JQuery 定义被 TypeScript 0.9 搞砸了
Posted
技术标签:
【中文标题】JQuery 定义被 TypeScript 0.9 搞砸了【英文标题】:JQuery definition screwed up with TypeScript 0.9 【发布时间】:2013-06-16 14:44:23 【问题描述】:我刚刚升级到 TypeScript 0.9,突然我的 JQuery 定义文件(用于 JQuery 1.8)爆炸了。具体来说,接口 JQuery 正在报告其中定义的每个方法的错误。他们都报告“所有属性必须是字符串索引器类型'htmlElement'的子类型。
interface JQuery
ajaxComplete(handler: any): JQuery;
ajaxError(handler: (event: any, jqXHR: any, settings: any, exception: any) => any): JQuery;
ajaxSend(handler: (event: any, jqXHR: any, settings: any, exception: any) => any): JQuery;
ajaxStart(handler: () => any): JQuery;
ajaxStop(handler: () => any): JQuery;
ajaxSuccess(handler: (event: any, jqXHR: any, settings: any, exception: any) => any): JQuery;
... //All reporting same error
如您所料,JQuery 接口在我的项目中的许多不同文件中定义。这是统一接口的错误还是我错过了需要对定义文件进行的一些更改?
【问题讨论】:
【参考方案1】:这不是错误。它是一个计划中的功能。这是因为一旦定义了索引器,它也可以用于访问属性,因此属性需要是索引器的子类型。例如:
interface Foo
[x:string]:number; // Now all properties must be subtypes of number
bar:number ; // okay
baz:string ; // Error
Try It
您可以在此处找到有效的 Jquery 定义:https://github.com/borisyankov/DefinitelyTyped/blob/master/jquery/jquery.d.ts
【讨论】:
谢谢。应该提到的是,只有具有 string 键的索引器才会受到此限制的影响。以上是关于JQuery 定义被 TypeScript 0.9 搞砸了的主要内容,如果未能解决你的问题,请参考以下文章
如何获取特定版本的 Jquery(例如 3.2.1)的 TypeScript 定义文件?
TypeScript Jquery Promise 参数不匹配
安装多个 typescript 类型定义,声明相同的全局变量