Angular 8执行ng serve启动时报TS1144语法错误如何解决
问题现象
运行ng serve启动Angular 8.2.0项目时抛出如下编译错误:
ERROR in ../node_modules/@types/node/assert.d.ts:3:68 - error TS1144: '{' or ';' expected
项目核心依赖版本:
Angular CLI: 8.2.0 本地运行Node版本: 14.19.1 项目TypeScript版本: 3.4.5 项目@types/node依赖版本: ^14.14.31
错误原因
核心原因是依赖版本不兼容:
- Angular 8.2.0官方配套的TypeScript版本范围是3.4.x~3.5.x,这个版本的TypeScript不支持高版本
@types/node里使用的新型TypeScript语法。 - 当前安装的
@types/node@14.x是为更高版本TypeScript编写的类型定义,TS 3.4.5解析这些类型文件时无法识别新语法,直接抛出语法解析错误。
修复方案
优先选择改动成本最低的方案:
- 降级
@types/node到兼容TS 3.4.x的版本,推荐使用12.x最终稳定版,操作步骤如下:- 卸载当前不兼容的@types/node依赖:
npm uninstall @types/node --save-dev - 安装兼容版本:
npm install @types/node@12.20.55 --save-dev - 删除项目根目录下的
node_modules文件夹、包管理锁文件(package-lock.json或yarn.lock),重新执行npm install安装依赖后,再运行ng serve即可正常启动。
- 卸载当前不兼容的@types/node依赖:
其他可选方案(改动成本较高,老项目不推荐):
- 整体升级Angular、TypeScript版本到适配Node 14和@types/node@14.x的版本(Angular 12+),需要同步修改项目中不兼容的API语法。
- 降级本地Node运行版本到12.x,搭配对应版本的@types/node,缺点是会影响本地其他依赖高版本Node的项目运行。
内容的提问来源于stack exchange,提问作者Sibaprasad Maiti
相关产品推荐
相关产品推荐

