web-dev-qa-db-fra.com

Les énumérations de chaîne de TypeScript - "Le type ... n'est pas assignable au type ..."

J'ai récemment mis à niveau la version de TypeScript de 2.3.4 à 2.4.0 dans l'espoir d'utiliser l'énumération string . À mon grand désarroi, toutefois, les messages d'erreur suivants m'ont été accueillis:

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

Les messages d'erreur s'appliquent à l'extrait de code suivant (avec les numéros de ligne):

13. export enum StepType {
14.    Start = 'S',
15.    Activity = 'A',
16.    Decision = 'D',
17.    End = 'E'
18. }

J'utilise Visual Studio 2017 qui prétend que TypeScript 2.4.0 est installé:

 enter image description here

J'ai cherché dans les problèmes de TypeScript , mais sans succès. Est-ce que quelqu'un sait comment résoudre ce problème?

26
Dawid O

Inspiré par la réponse de Duncan , j'ai trouvé la cause fondamentale. Bien que l'application utilisait TypeScript 2.4, IntelliSense de VS était toujours bloqué dans la version 2.3.  VS IntelliSense was not updated

Pour résoudre le problème, il fallait télécharger et installer TypeScript 2.4 SDK , puis sélectionner parmi les options la version la plus récente:

 enter image description here

5
Dawid O

C'est parce que la version TypeScript.

Invite de commande ouverte ou terminal. puis exécutez ces commandes.

Vérifier la version TypeScript

tsc -v

devrait être supérieur à 2,4

si non.

installe globalement la dernière version de TypeScript

npm install TypeScript -g

Ouvrez votre fichier package.json du projet .__ et changez la version de TypeScript de cette manière avec la version nouvellement installée.

"TypeScript": "~2.6.1"

Puis supprimez le dossier node_modules

Nettoyer le cache en utilisant

npm cache clean

Enfin courir 

npm install

* Notez que: Vous pouvez mettre à jour npm à l’aide de npm update mais il n’est pas certain que la version TypeScript sera mise à jour *

23

C'est l'erreur que vous obtenez lors de la compilation avec une version de TypeScript antérieure à 2.4. Tout ce que je peux dire, c'est que votre copie de Visual Studio reprend en quelque sorte sa propre version antérieure de TypeScript au lieu d'utiliser la version la plus récente installée dans votre projet. Consultez le wiki https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017 pour obtenir des instructions sur la mise à jour de 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>
7
Duncan

Pour moi, le problème était que @angular/cli utilisait une version inférieure de TypeScript. Vérifiez votre fichier de verrouillage. Il montrait une exigence de <2.4.0. Notre projet utilise yarn.lock, par exemple. 

Lors de la compilation, une erreur liée à la version inférieure de TypeScript a été générée. Pour résoudre le problème, j'ai ajouté le drapeau compatible ^ au début. Donc pour nous, cela a commencé comme:

"@angular/cli": "1.2.5"

...changé en:

"@angular/cli": "^1.2.5"

Cela semble résoudre le problème. Il est à noter que cela force essentiellement cli à utiliser la version d'espace de travail de TypeScript. Pour nous, il s'agit de 2.4.0, avec lequel cette version de cli n'est pas techniquement compatible (car elle nécessite <2.4.0). Un avertissement est émis lors de la compilation, mais cela a fonctionné avec succès pour nous pour le moment.

1
kbpontius

J'ai eu les mêmes problèmes pour mon projet Angular2. Je devais mettre à jour la bibliothèque TypeScript (TS) dans mon projet Angular2. 

1) Dans votre package.json, ajoutez ceci à la section "devDependencies": 

"ts-node": "~3.2.0",
"tslint": "~5.7.0",
"TypeScript": "~2.4.2"

Alors le mien ressemble à: 

  "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) Supprimez le package "node_modules" et le fichier "package-lock.json" de votre projet.

3) Faites "npm install" sur votre ligne de commande afin d’installer toutes les nouvelles bibliothèques TS. 

0
Gene

Dans Visual Studio 2017 version 15.3 et ultérieure, la version TypeScript utilisée est liée à des projets individuels.

Référence - https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017

0
ppenchev