我最近将TypeScript的版本从2.3.4升级到2.4.0,希望使用string enums。然而令我沮丧的是,我收到了错误消息:
<ListView Width="Auto" Height="Auto" Margin="10" Background="#092E3E" Foreground="White" ItemsSource="{Binding BackupEvents}" > <!-- HERE: --> <ListView.Resources> <Style TargetType="{x:Type ListViewItem}"> <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> </Style> </ListView.Resources> <ListView.ItemContainerStyle> <Style TargetType="{x:Type ListViewItem}"> ... </Style> </ListView.ItemContainerStyle> <ListView.View> <GridView AllowsColumnReorder="False"> <GridView.ColumnHeaderContainerStyle> ... </GridView.ColumnHeaderContainerStyle> <GridView.Columns> <GridViewColumn Width="200" Header="Time" DisplayMemberBinding="{Binding LVTime}"/> // auto or fixed? <GridViewColumn Width="Auto"/"520" Header="Details" DisplayMemberBinding="{Binding LVDetails}"/> </GridView.Columns> </GridView> </ListView.View> </ListView>
错误消息适用于以下代码段(带行号):
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
我正在使用声称安装了TypeScript 2.4.0的Visual Studio 2017:
我搜索了TypeScript's issues,但没有运气。有人知道如何解决它吗?
答案 0 :(得分:24)
这是因为打字稿版本。
打开命令提示符或终端。然后运行这些命令。
检查TypeScript版本
tsc -v
应高于2.4
如果没有。
全球安装最新版本的打字稿
npm install typescript -g
打开项目的package.json文件 并使用新安装的版本
更改这样的打字稿版本"typescript": "~2.6.1"
然后删除node_modules文件夹
使用
清理缓存npm cache clean
最后运行
npm install
*请注意:您可以使用 npm update 更新npm,但不确定要更新的打字稿版本*
答案 1 :(得分:7)
这是使用早于2.4的打字稿版本进行编译时出现的错误。我可以建议的是,你的Visual Studio副本以某种方式获取了自己的旧版本的打字稿,而不是使用项目中安装的较新版本。有关更新打字稿的说明,请参阅维基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>
答案 2 :(得分:5)
受Duncan's answer的启发,我找到了根本原因。尽管该应用程序使用的是TypeScript 2.4,但VS的IntelliSense仍然停留在2.3版本中。
解决此问题的方法是下载并安装TypeScript 2.4 SDK,然后从新版本的选项中进行选择:
答案 3 :(得分:1)
对我来说,问题是@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
在技术上并不兼容(因为它需要&lt; 2.4.0)。它在编译时会发出警告,但它暂时成功地为我们工作。
答案 4 :(得分:0)
我的Angular2项目遇到了同样的问题。我需要在Angular2项目中更新Typescript(TS)库。
1)在你的package.json中,将它添加到&#34; devDependencies&#34;部分:
"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)删除&#34; node_modules&#34;包和&#34; package-lock.json&#34;来自项目的文件。
3)&#34; npm install&#34;在命令行上安装所有新的TS库。
答案 5 :(得分:0)
在Visual Studio 2017 15.3和更高版本中,使用的TypeScript版本绑定到单个项目。
参考-https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017
答案 6 :(得分:0)
如果您像我一样,使用VS而不是在项目中使用(只需打开一个文件夹),那么我只需要为VS安装最新版本的TS:
https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.typescript-27-vs2017
答案 7 :(得分:0)
如果您使用的是Visual Studio 2017社区版本。您不会在“工具/选项”中找到TypeScript智能感知。 您应该编辑项目文件.jsproj。 TypeScriptToolsVersion
并将TypeScriptToolsVersion更新为2.6.2或最新版本。
答案 8 :(得分:0)
使用'any'的类型转换将解决:
enum StepType {
ENGLISH = <any>'S',
}