我在Visual Studio 2012中的TypeScript项目中引用了jquery.d.ts并收到以下错误:
错误1重复的标识符 'nodeName'C:\ DEV \ MyProject \ Scripts \ JQuery \ jquery.d.ts 786 2 pageMain.ts
这导致jquery.d.ts中的以下代码:
interface EventTarget {
nodeName: string;
}
我已经重新启动了VS2012,然后在删除项目的所有.sou文件之后再次启动。
我已检查了所有引用(包含),但未找到对EventTarget的其他引用。
我查看了lib.d.ts,确实有一个EventTarget接口,但它没有实现nodeName。
仅供参考:我在我的机器上找到了两份lib.d.ts,并检查了它们:有没有人知道编译器使用了哪一个?我在两者上做了mods(将window.alert更改为window.alert2),但它们没有效果。
答案 0 :(得分:2)
您的jQuery.d.ts需要更新。
以下是测试问题的快速方法:
declare var x: EventTarget;
x.nodeName = '';
如果您在TypeScript Playground上运行此操作,您会发现nodeName
上不存在EventTarget
。实际上,如果你查看lib.d.ts文件,你会发现:
interface EventTarget {
removeEventListener(type: string, listener: EventListener, useCapture?: bool): void;
addEventListener(type: string, listener: EventListener, useCapture?: bool): void;
dispatchEvent(evt: Event): bool;
}
但是,如果在Visual Studio中使用Web Essentials运行相同的代码,您会发现EventTarget上存在nodeName
。这是因为Web Essentials使用的是较新版本的lib.d.ts - 如果禁用Web Essentials,则会出现与Playground中相同的错误。
随着标准定义的改进以跟上浏览器实际支持的内容,这些问题偶尔会发生。应调整您的定义文件以与开发工具保持一致,优先考虑更改文件,例如jquery.d.ts而不是lib.d.ts。
答案 1 :(得分:0)
有趣的错误,我遇到了className而不是nodeName
的相同问题在花了一些时间尝试解决问题之后,我在jquery.d.ts文件中找到了这篇文章链接
我正在维护general.d.ts文件以创建所需的所需接口项。 我将以下定义添加到文件
interface EventTarget {
className: string;
}
我立即收到重复标识符的错误消息。 我保留了它并保存了general.d.ts,然后回到我原来的工作文件,我发现编译器通过了。 我的假设是Web Essentials错误无法正确加载定义。