在jquery.d.ts中重复标识符'nodeName'

时间:2013-02-12 01:43:59

标签: visual-studio-2012 typescript

我在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),但它们没有效果。

2 个答案:

答案 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错误无法正确加载定义。