web-dev-qa-db-ja.com

TypeScriptの文字列列挙-「タイプ...はタイプ...に割り当てられません」

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を使用しています:

enter image description here

TypeScriptの問題 を検索しましたが、運はありませんでした。誰かがそれを修正する方法を知っていますか?

33
Dawid O

ダンカンの答え に触発されて、根本原因を見つけました。アプリケーションはTypeScript 2.4を使用していましたが、VSのIntelliSenseは2.3のままです。 VS IntelliSense was not updated

この問題を解決する方法は、 TypeScript 2.4 SDK をダウンロードしてインストールし、オプションから新しいバージョンを選択することでした。

enter image description here

5
Dawid O

これは、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バージョンが更新されるかどうかはわかりません*

25

これは、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>
8
Duncan

私にとって問題は、@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を必要とするため)。コンパイル時に警告がスローされますが、当面は正常に機能します。

1
kbpontius

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」を実行します。

0
Gene

Visual Studio 2017 Communityバージョンを使用している場合。 [ツール/オプション]にTypeScriptインテリセンスはありません。プロジェクトファイル.jsprojを編集する必要があります。 TypeScriptToolsVersion

typeScriptToolsVersionを2.6.2または最新バージョンに更新します。

0
Zeeshan Anjum

Visual Studio 2017バージョン15.3以降では、使用されるTypeScriptバージョンは個々のプロジェクトにバインドされています。

リファレンス- https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017

0
ppenchev

あなたが私のように、VSを使用しているがプロジェクトではない(フォルダを開くだけ)場合、VS用のTSの最新バージョンをインストールする必要がありました:

https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.TypeScript-27-vs2017

0
DoubleA