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.
Ответ 6
В Visual Studio 2017 версии 15.3 и новее используемая версия TypeScript привязана к отдельным проектам.
Ссылка - https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017
Ответ 7
Если вы похожи на меня, используете VS, но не в проекте (просто открываете папку), тогда мне просто нужно было установить последнюю версию TS для VS:
https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.typescript-27-vs2017
Ответ 8
Если вы используете Visual Studio 2017 Community версии. вы не найдете TypeScript intellisense в Инструменты/Параметры.
Вам следует отредактировать файл проекта .jsproj.
TypeScriptToolsVersion
и обновите TypeScriptToolsVersion до версии 2.6.2 или более поздней версии.