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のコピーを2つ見つけて、両方をチェックしました。どちらがコンパイラで使用されているか知っている人はいますか?両方でmodを実行しました(window.alertをwindow.alert2に変更)が、効果はありませんでした。

4

2 に答える 2

2

jQuery.d.tsを更新する必要があります。

問題をテストする簡単な方法は次のとおりです。

declare var x: EventTarget;
x.nodeName = '';

nodeNameTypeScript Playgroundでこれを実行すると、には存在しないことがわかります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;
}

ただし、WebEssentialsを使用してVisualStudio内で同じコードを実行すると、EventTargetに存在することnodeName わかります。これは、Web Essentialsが新しいバージョンのlib.d.tsを使用しているためです。WebEssentialsを無効にすると、Playgroundで表示されるのと同じエラーが発生します。

これらの問題は、ブラウザが実際にサポートしているものに対応するために標準定義が改善されているため、ときどき発生します。定義ファイルは、lib.d.tsではなくjquery.d.tsなどのファイルを変更することを優先して、開発ツールと一致するように調整する必要があります。

于 2013-02-12T10:21:50.640 に答える
0

興味深いバグですが、nodeNameではなくclassNameで同じ問題に直面しました

問題の解決に時間を費やした後、jquery.d.tsファイルにこの記事のリンクが見つかりました

必要なインターフェイスアイテムを作成するためにgeneral.d.tsファイルを維持しています。次の定義をファイルに追加しました

     interface EventTarget {
         className: string;
    }

すぐに、識別子が重複しているというエラーメッセージが表示されました。それを保持してgeneral.d.tsを保存し、元の作業ファイルに戻ると、コンパイラーが通過したことがわかりました。私の想定では、WebEssentialsのバグが定義を正しくロードできないことです。

于 2013-06-19T19:19:50.067 に答える