string enums を使用することを期待して、TypeScriptのバージョンを2.3.4から2.4.0に最近アップグレードしました。しかし、残念なことに、エラーメッセージが表示されました。
Severity Code Description Project File Line Suppression State Error TS2322 Type '"E"' is not assignable to type 'StepType'. ClientApp (tsconfig project) Z:\SMART\Smart\Smart\ClientApp\app\models\process.model.ts 17 Active Error TS2322 Type '"S"' is not assignable to type 'StepType'. ClientApp (tsconfig project) Z:\SMART\Smart\Smart\ClientApp\app\models\process.model.ts 14 Active Error TS2322 Type '"A"' is not assignable to type 'StepType'. ClientApp (tsconfig project) Z:\SMART\Smart\Smart\ClientApp\app\models\process.model.ts 15 Active Error TS2322 Type '"D"' is not assignable to type 'StepType'. ClientApp (tsconfig project) Z:\SMART\Smart\Smart\ClientApp\app\models\process.model.ts 16 Active
エラーメッセージは、次のコードスニペット(行番号付き)に適用されます。
13. export enum StepType {
14. Start = 'S',
15. Activity = 'A',
16. Decision = 'D',
17. End = 'E'
18. }
TypeScript 2.4.0がインストールされていると主張するVisual Studio 2017を使用しています:
TypeScriptの問題 を検索しましたが、運はありませんでした。誰かがそれを修正する方法を知っていますか?
ダンカンの答え に触発されて、根本原因を見つけました。アプリケーションはTypeScript 2.4を使用していましたが、VSのIntelliSenseは2.3のままです。
この問題を解決する方法は、 TypeScript 2.4 SDK をダウンロードしてインストールし、オプションから新しいバージョンを選択することでした。
これは、TypeScriptバージョンが原因です。
コマンドプロンプトまたはターミナルを開きます。次に、これらのコマンドを実行します。
TypeScriptバージョンを確認
tsc -v
2.4より高くする必要があります
そうでない場合。
TypeScriptの最新バージョンをグローバルにインストールする
npm install TypeScript -g
プロジェクトのpackage.jsonファイルを開き、新しくインストールされたバージョンでこのようなTypeScriptバージョンを変更します
"TypeScript": "~2.6.1"
次に、node_modulesフォルダーを削除します
を使用してキャッシュを消去
npm cache clean
最後に実行
npm install
*注意:npm updateを使用してnpmを更新できますが、TypeScriptバージョンが更新されるかどうかはわかりません*
これは、2.4よりも古いバージョンのTypeScriptでコンパイルするときに発生するエラーです。私が提案できるのは、Visual Studioのコピーが、プロジェクトにインストールされている新しいバージョンを使用するのではなく、何らかの形で古いバージョンのTypeScriptを選択していることです。 TypeScriptの更新手順については、ウィキ https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017 を参照してください。
PS C:\temp> cat t.ts
enum StepType {
Start = 'S',
Activity = 'A',
Decision = 'D',
End = 'E'
}
PS C:\temp> node somepath\node_modules\TypeScript\bin\tsc --version
Version 2.2.2
PS C:\temp> node somepath\node_modules\TypeScript\bin\tsc t.ts
t.ts(2,13): error TS2322: Type '"S"' is not assignable to type 'StepType'.
t.ts(3,16): error TS2322: Type '"A"' is not assignable to type 'StepType'.
t.ts(4,16): error TS2322: Type '"D"' is not assignable to type 'StepType'.
t.ts(5,11): error TS2322: Type '"E"' is not assignable to type 'StepType'.
PS C:\temp> tsc --version
Version 2.4.1
PS C:\temp> tsc t.ts
PS C:\temp>
私にとって問題は、@angular/cli
がTypeScriptの下位バージョンを使用していたことでした。ロックファイルを確認します。 <2.4.0の要件を示していました。たとえば、プロジェクトではyarn.lock
を使用します。
コンパイル時に、下位バージョンのTypeScriptに関連するエラーがスローされていました。この問題を修正するために、互換フラグ^
を前面に追加しました。だから私たちにとって、それは次のように始まりました:
"@angular/cli": "1.2.5"
...に変更:
"@angular/cli": "^1.2.5"
これで問題が解決したようです。本質的にcli
がTypeScriptのワークスペースバージョンを使用するように強制することに注意してください。私たちにとって、これは2.4.0
であり、このバージョンのcli
は技術的に互換性がありません(2.4.0を必要とするため)。コンパイル時に警告がスローされますが、当面は正常に機能します。
Angular2プロジェクトでも同じ問題が発生しました。 Angular2プロジェクトでTypeScript(TS)ライブラリを更新する必要がありました。
1)package.json内で、これを「devDependencies」セクションに追加します。
"ts-node": "~3.2.0",
"tslint": "~5.7.0",
"TypeScript": "~2.4.2"
だから私のように見えます:
"devDependencies": {
"@angular/compiler-cli": "^2.3.1",
"@types/jasmine": "2.5.38",
"@types/node": "^6.0.42",
"angular-cli": "1.0.0-beta.28.3",
"codelyzer": "~2.0.0-beta.1",
"jasmine-core": "2.5.2",
"jasmine-spec-reporter": "2.5.0",
"karma": "1.2.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.0.2",
"karma-remap-istanbul": "^0.2.1",
"protractor": "~4.0.13",
"ts-node": "~3.2.0",
"tslint": "~5.7.0",
"TypeScript": "~2.4.2"
}
2)プロジェクトから「node_modules」パッケージと「package-lock.json」ファイルを削除します。
3)すべての新しいTSライブラリをインストールするために、コマンドラインで「npm install」を実行します。
Visual Studio 2017 Communityバージョンを使用している場合。 [ツール/オプション]にTypeScriptインテリセンスはありません。プロジェクトファイル.jsprojを編集する必要があります。 TypeScriptToolsVersion
typeScriptToolsVersionを2.6.2または最新バージョンに更新します。
Visual Studio 2017バージョン15.3以降では、使用されるTypeScriptバージョンは個々のプロジェクトにバインドされています。
リファレンス- https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017
あなたが私のように、VSを使用しているがプロジェクトではない(フォルダを開くだけ)場合、VS用のTSの最新バージョンをインストールする必要がありました:
https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.TypeScript-27-vs2017