问题
I have recently upgraded the version of TypeScript from 2.3.4 to 2.4.0 hoping to use the string enums. To my dismay, however, I have been greeted with the error messages:
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
The error messages apply to the following code snippet (with the line numbers):
13. export enum StepType {
14. Start = 'S',
15. Activity = 'A',
16. Decision = 'D',
17. End = 'E'
18. }
I am using Visual Studio 2017 which claims TypeScript 2.4.0 is installed:
I searched through TypeScript's issues, but without luck. Does anybody know how to fix it?
回答1:
This is because typescript version.
Open command prompt or terminal. then run these commands.
Check TypeScript version
tsc -v
should be higher than 2.4
if not.
install latest version of typescript globally
npm install typescript -g
Open your package.json file of the project and change typescript version like this with newly installed version
"typescript": "~2.6.1"
Then delete node_modules folder
Clean cache using
npm cache clean
Finally run
npm install
*Note that: You can update npm using npm update but it is not sure that the typescript version will be updated *
回答2:
This is the error you get when compiling with a version of typescript older than 2.4. All I can suggest is that your copy of Visual Studio is somehow picking up its own older version of typescript rather than using the newer one installed in your project. See the wiki https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017 for instructions on updating typescript.
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>
回答3:
Inspired by Duncan's answer, I found the root cause. Although the application was using TypeScript 2.4, VS's IntelliSense was still stuck in 2.3.
The way to resolve the issue was to download and install TypeScript 2.4 SDK and then select from the options the newer version:
回答4:
For me, the problem was that @angular/cli
was using a lower version of Typescript. Check out your lock file. It was showing a requirement of <2.4.0. Our project uses yarn.lock
, for example.
When it compiled, it was throwing an error related to the lower version of Typescript. To fix the problem, I added the compatible flag ^
to the front. So for us, it started as:
"@angular/cli": "1.2.5"
...changed to:
"@angular/cli": "^1.2.5"
This seems to fix the issue. It's worth noting that it essentially forces cli
to use the workspace version of Typescript. For us, this is 2.4.0
, which this version of cli
isn't technically compatible with (since it requires <2.4.0). It throws a warning when compiling, but it has worked successfully for us for the time being.
回答5:
I had the same issues for my Angular2 project. I needed to update the Typescript (TS) library in my Angular2 project.
1) Inside your package.json, add this to the "devDependencies" section:
"ts-node": "~3.2.0",
"tslint": "~5.7.0",
"typescript": "~2.4.2"
So mine looks like:
"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) Delete "node_modules" package and "package-lock.json" file from your project.
3) Do "npm install" on your command line in order to install all the new TS libraries.
回答6:
In Visual Studio 2017 version 15.3 and later, the TypeScript version used is bound to individual projects.
Reference - https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017
回答7:
If you are like me, using VS but not in project (just opening a folder), then I just had to install the latest version of TS for VS:
https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.typescript-27-vs2017
回答8:
If you are using Visual studio 2017 Community version. you will not find TypeScript intellisense in Tools/Options. You should edit the project file .jsproj. TypeScriptToolsVersion
and update TypeScriptToolsVersion to 2.6.2 or latest version.
来源:https://stackoverflow.com/questions/45191472/typescripts-string-enums-type-is-not-assignable-to-type