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. }

Я использую Visual Studio 2017, которая утверждает, что установлен TypeScript 2.4.0:

enter image description here

Я искал проблемы с TypeScript, но без везения. Кто-нибудь знает, как это исправить?

Ответы

Ответ 1

Вдохновленный ответом Дункана, я нашел основную причину. Хотя приложение использовало TypeScript 2.4, VS IntelliSense все еще завис в версии 2.3. VS IntelliSense was not updated

Чтобы решить эту проблему, нужно было загрузить и установить TypeScript 2.4 SDK, а затем выбрать из вариантов более новую версию:

enter image description here

Ответ 2

Это потому, что 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, используя обновление npm, но не уверены, что версия typescript будет обновлена ​​*

Ответ 3

Это ошибка, возникающая при компиляции с версией typescript старше 2.4. Все, что я могу предложить, это то, что ваша копия Visual Studio каким-то образом собирает свою собственную более старую версию typescript, а не использует новую версию, установленную в вашем проекте. Инструкции по обновлению typescript см. В wiki 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>

Ответ 4

Для меня проблема заключалась в том, что @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). Он генерирует предупреждение при компиляции, но пока он успешно работает для нас.

Ответ 5

У меня были те же проблемы для моего проекта Angular2. Мне нужно было обновить библиотеку Typescript (TS) в моем проекте Angular2.

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) Выполните "npm install" в командной строке, чтобы установить все новые библиотеки TS.

Ответ 8

Если вы используете Visual Studio 2017 Community версии. вы не найдете TypeScript intellisense в Инструменты/Параметры. Вам следует отредактировать файл проекта .jsproj. TypeScriptToolsVersion

и обновите TypeScriptToolsVersion до версии 2.6.2 или более поздней версии.