ng build报TS语法错误但IDE运行正常的问题求助
问题原因
你遇到的编译错误是因为映射类型的键重映射(as子句语法)是TypeScript 4.1版本才新增的特性,你项目本地构建使用的TypeScript版本低于4.1,编译器无法识别该语法,就会抛出对应的语法错误。
IDE和在线示例运行正常,是因为编辑器的TypeScript服务、在线环境的依赖版本均高于4.1,和本地构建使用的依赖版本不一致。
排查&解决步骤
- 首先执行
ng version命令,确认 Angular 构建工具调用的TypeScript实际版本,确认是否低于4.1.0。 - 可选方案1:升级TypeScript版本
参考你当前使用的Angular版本兼容的TypeScript范围,将package.json中devDependencies下的typescript依赖升级到4.1及以上的兼容版本,删除node_modules、包锁文件后重新安装依赖即可。 - 可选方案2:兼容低版本TypeScript改写类型
如果你暂时不想升级TypeScript,可以将Only类型改写为不需要键重映射语法的等效写法,支持TypeScript 2.8及以上版本:
改写后原有类型校验逻辑完全不变,本地编译即可正常通过。type Only<T, K> = Pick<T, { [P in keyof T]: T[P] extends K ? P : never }[keyof T]>
内容的提问来源于stack exchange,提问作者Muuski
相关产品推荐
相关产品推荐

