TypeScript's string enums - "Type ... is not assignable to type ..."

Viewed 30324

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:

enter image description here

I searched through TypeScript's issues, but without luck. Does anybody know how to fix it?

9 Answers

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 *

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.

typecast with 'any' will work out:

enum StepType {
    ENGLISH = <any>'S',
}

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.

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.

Related