升级aws-amplify到3.2.3后Angular应用构建报Cannot find name 'Omit'错误
问题根因
Omit是TypeScript 3.5版本才正式内置的工具类型,你的项目存在明确的依赖版本不兼容问题:
- 项目当前TypeScript版本为
~3.2.2,本身不支持识别Omit类型 - 你升级到的aws-amplify@^3.2.3内部的DataStore模块类型定义使用了
Omit,编译时TS无法识别该类型就直接抛出了对应错误 - 额外约束:你用的Angular 7.2.x官方支持的最高TypeScript版本就是3.2.x,无法直接升级TS版本适配高版本Amplify
可选择的解决方案
你可以根据项目的升级约束选对应方案:
方案1:降级AWS Amplify版本
将package.json里的aws-amplify版本降到3.0.0以下的稳定版,该版本区间的Amplify没有用到TS3.5+的新类型,修改后重新执行npm install即可解决报错。
方案2:手动补全Omit类型声明
如果不想降级Amplify,可以在项目全局类型定义文件(通常是src目录下的typings.d.ts,如果没有就新建一个),或者在src/polyfills.ts文件末尾添加如下声明,手动补全TS3.2缺失的Omit类型:
declare type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
添加后重新执行ng build即可正常编译。
方案3:升级Angular框架(长期适配方案)
如果项目允许升级基础框架,可以把Angular升级到9.x及以上版本,同时将TypeScript升级到3.6+版本,就能原生支持Omit类型,适配更高版本的Amplify。
执行命令验证
你之前执行的三条命令本身逻辑正确,报错和命令执行没有关系,完全是依赖版本不兼容导致的。
内容的提问来源于stack exchange,提问作者Raghu Ram
相关产品推荐
相关产品推荐

