Visual studio 2012 重复标识符';nodeName';在jquery.d.ts中

Visual studio 2012 重复标识符';nodeName';在jquery.d.ts中,visual-studio-2012,typescript,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文件后再次启动 我已检查

我在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副本,并对它们进行了检查:有人知道编译器使用的是哪一个吗?我在这两个方面都做了修改(将window.alert更改为window.alert2),但都没有效果。

您的jQuery.d.ts需要更新

以下是测试问题的快速方法:

declare var x: EventTarget;
x.nodeName = '';
如果在TypeScript平台上运行此操作,您将看到
EventTarget
上不存在
nodeName
。实际上,如果查看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,您将得到与在操场上看到的相同的错误


随着标准定义的改进以跟上浏览器实际支持的内容,这些问题偶尔会发生。您的定义文件应该进行调整,以与您的开发工具保持一致,优先更改jquery.d.ts而不是lib.d.ts等文件。

有趣的错误是,我在使用className而不是nodeName时遇到了同样的问题

在花了一些时间试图解决这个问题之后,我在jquery.d.ts文件中找到了这篇文章的链接

我正在维护general.d.ts文件,以创建所需的接口项。 我在文件中添加了以下定义

     interface EventTarget {
         className: string;
    }
我立即收到一条重复标识符的错误消息。 我保留了它并保存了general.d.ts,然后回到我原来的工作文件,我发现编译器通过了。
我的假设是Web Essentials bug未能正确加载定义。

从何处获取jquery.d.ts文件。我觉得您有错误的文件,请从中获取,如果我在lib.d.ts文件中没有看到EventTarget.nodeName,这怎么会是问题?编译器是否使用某种类型的隐藏lib.d.ts文件?如果没有,它位于哪里?Web Essentials必须使用自己版本的
lib.d.ts
。您可以通过禁用Web Essentials并重新启动Visual Studio来测试这一点—您将看到不同之处。