1

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

4

2 回答 2

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;
}

但是,如果您使用 Web Essentials 在 Visual Studio 中运行相同的代码,您会发现EventTarget 上nodeName 确实存在该代码。这是因为 Web Essentials 使用的是较新版本的 lib.d.ts - 如果禁用 Web Essentials,您将收到与在 Playground 中看到的相同的错误。

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

于 2013-02-12T10:21:50.640 回答
0

有趣的错误,我遇到了与 className 而不是 nodeName 相同的问题

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

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

     interface EventTarget {
         className: string;
    }

我立即收到重复标识符的错误消息。我保留它并保存了general.d.ts,然后回到我原来的工作文件,我发现编译器通过了。我的假设是 Web Essentials 错误无法正确加载定义。

于 2013-06-19T19:19:50.067 回答