UPDATE:ハッキングなしで問題なく動作するようにする回避策があります。後世のために、以下で説明する以前の試みを残します。実用的なソリューションの答えをご覧ください。
プロジェクトをVisual Studio 2017にアップグレードしたばかりで、あらゆる種類のTypeScriptエラーが突然発生しています。それらの多くは_Duplicate identifier
_エラーです。エラーの1つをダブルクリックすると、次のようなディレクトリにあるindex.d.tsというファイルが開きます。
_C:\Users\[me]\AppData\Local\Microsoft\TypeScript\node_modules\@types\jquery\index.d.ts
_
このページで読んだ内容に基づいて:
...起こっているのは、Visual Studioが定義ファイルをすでに手動で含めているタイプの定義ファイルを便利にダウンロードしようとしているようです。定義ファイルの自動インクルードは素晴らしい機能のように聞こえます!手動で含めたものを削除するだけですよね?しかし、私が何もしないようです。誰かが私が間違っているところを教えてくれることを願っています。
背景として、Visual Studio 2015での作業の仕方は次のとおりです。私は、jQuery、jQuery UI、およびQUnitの3つのライブラリーを使用していました。 DefinitelyTypedから.d.tsファイルをダウンロードし、プロジェクトのScriptsディレクトリに配置するだけで、VS 2017でプロジェクトを開くまですべて正常に機能しました。
エラーメッセージから、Visual Studio 2017が独自の定義ファイルを読み込んでいるように見えるため、手動で読み込んだものを削除するだけだと考えました。しかし、それを行うと、_Cannot find name $
_エラーが大量に発生します。これは、何らかの理由でこれらの定義ファイルが取り込まれなくなったことを意味しているようです。
次に、プロジェクトに実際にJQuery(およびその他のライブラリ)ソースファイルがなかったことが問題であると考えました。 HTMLソースでGoogleのCDNから参照しているだけです。上記のリンクは、Visual Studioが定義ファイルを取り込む必要があることを示すインジケータとして実際のルーズファイルを探しているように聞こえます。そのため、手動でScriptsディレクトリにファイルを追加して再構築しましたが、何も変わりませんでした。
上記のリンクページでは、npmまたはbowerのライブラリファイルを含めること、またはtsconfig.jsonファイルを使用することについても説明していますが、それらの道を進む前に(私の通常のワークフローの一部ではありません)、誰かが教えてくれることを願っていますVisual Studio 2017にTypeScript定義を取り込む好ましい方法はありますか?前もって感謝します。
UPDATE:(以下のアップデート2も参照)動作するようになりました。これは正確に直観的なものではなかったので、a)誰かを助け、b)間違ったやり方をしているだけだと誰かが教えてくれることを期待して、ここでステップを共有しています。
var foo = $(document);
{ "compilerOptions": { "types": [] } }
_<Project>\obj\Debug\...
_でコピーが作成されたようです(パスは長くなりましたが、記録するのを忘れていました)obj
ディレクトリ全体を手動で削除します。UPDATE 2:上記のアプローチのいくつかの欠点を発見しました。また、より良い解決策があります。
Tsconfig.jsonの使用には大きな欠点があります。保存時に再コンパイルするオプションは、Visual Studio内では機能しません。サイトをデバッグモードで実行し、TypeScriptにいくつかの変更を加え、保存をクリックして、すぐにそれらの変更がサイトに反映されるのを確認します。
私にとってトラブルを引き起こしていたことの1つは、TypeScriptファイルがスクリプト以外のフォルダにあることだと思いますサーバーにそのまま展開する必要があります。 Microsoftはこれを非標準のユースケースと見なしていると思います。
これ以上長すぎると頭を壁にぶつけた後、私は簡単だが、ハッキーな解決策を見つけた。このディレクトリ内のすべてのサブディレクトリを取得しました。
_C:\Users\[me]\AppData\Local\Microsoft\TypeScript\node_modules\@types
_
それらを削除済みというディレクトリに移動しました。
バム。定義の自動インクルードやエラーはもうありません。
マイクロソフトは、あなたが読んでいるなら、私のシナリオのサポートを提供してください。
UPDATE 3:やっと機能しました。非ハッキングソリューションについては、以下の回答を参照してください。
ハックなしで動作するようになりました。トリックはtsconfig.json
ファイルを使用し、自動定義インクルードを無効にすることです。私の最初の質問で、私はこれを試してみましたが、保存時にコンパイルを使用できないことがわかりました。ただし、それは「compileOnSave」オプションを実際に使用すべきだったときに「watch」オプションを使用しようとしていたためです。
元の壊れたプロジェクトを適切に動作するに変換し、変更されていないVisual Studio 2017のインストールで引き続き適切に動作するための完全な一連の作業手順を次に示します。
ルートのプロジェクトにtsconfig.json
ファイルを追加します。
少なくとも以下を使用してファイルを構成します。
{ "compilerOptions": { "types": [] } }
ただし、おそらく他のオプションを使用することもできます。私のファイルは次のようになります。
{
"compileOnSave": true,
"compilerOptions": {
"types": [],
"sourceMap": true,
"target": "es5",
"noEmitOnError": true
}
}
他のコンパイラオプションについては、こちらで学ぶことができます。 https://www.typescriptlang.org/docs/handbook/compiler-options.html
定義が自動的に含まれないようにするのは、"types":[]
部分です。
つまり、使用するライブラリの定義を取り込むのはユーザー次第です。幸いなことに、NuGetを使用すると非常に簡単です。たとえば、jQueryの場合は、jquery.TypeScript.DefinitelyTyped
を検索して適切なバージョンをインストールするだけです。これにより、Scripts/typings
の下にフォルダーが作成されます。
以前にエラーが発生した場合は、いくつかの問題を解決する必要があるかもしれません。プロジェクトをクリーンアップし、プロジェクトのディレクトリ構造の最上部にあるobj
ディレクトリを削除します。これで正しくビルドされるはずです。ファイルに何かを入力して再び保存すると、いくつかのエラーが発生しました。 Visual Studioの再起動も適切な場合があります。
がんばろう!
UPDATE:Azureに発行すると、再びエラーが発生することがわかりました。ただし、Perfaによって提案されたディレクティブをtsconfig.jsonファイルに追加し、binおよびobjディレクトリを削除してVisual Studioを再起動すると、これらのエラーはありませんどちらかが長く現れた。これで、Azureを何度もビルドして再ビルドし、公開しましたが、本当にうまくいっているようです。
明確にするため、完全なtsconfig.jsonファイルは次のようになります。
{
"compileOnSave": true,
"compilerOptions": {
"types": [],
"sourceMap": true,
"target": "es5",
"noEmitOnError": true
},
"exclude": [
"node_modules",
"obj",
"bin"
]
}
vS 2017をインストールした後、このエラーが発生しました。それを取り除くために、tsconfig.json excludeセクションをobjとbinで更新しました。
"exclude": [
"node_modules",
"obj",
"bin"
]
私はVS 2017に更新した古いアプリでこの正確な問題を抱えていましたが、harley.333の答え-TypeScript 2.0 SDKを含めるようにインストールを変更することで修正しました。
コメントする担当者はいませんが、それを見つけるには、タブを「個別コンポーネント」に切り替える必要があります。次に、最後のグループ「SDK、ライブラリ、およびフレームワーク」に移動します。