升级@ngxs/store至3.7.3后编译报TS2339属性不存在错误如何解决
问题根因
报错中的ɵbc是Angular Ivy编译器生成的非公开私有导出标识符,命名会随依赖版本、编译配置动态变化。
你遇到的错误本质是依赖版本不兼容:报错文件来自@trec/app-modules@3.0.21包,这个包发布时是基于更低版本的@ngxs/store编译的,编译生成的d.ts类型文件里硬编码引用了旧版NGXS的内部标识ɵbc;你手动将项目内@ngxs/store升级到3.7.3后,新版NGXS调整了内部导出的标识符命名,TypeScript扫描类型文件时找不到对应属性就抛出了TS2339错误。
另外你的本地运行环境本身不符合项目要求:package.json中engines字段明确要求Node >=16.0.0、npm >=8.0.0,你当前使用的Node 12.20.0、npm 6.14.8会导致依赖安装时的版本解析逻辑异常,进一步放大兼容性问题。
解决方案(按落地优先级排序)
- 对齐NGXS版本到第三方依赖要求的范围(最稳定,无运行时风险)
这是最稳妥的处理方式,不会引入隐性运行时问题:- 先执行
npm ls @ngxs/store,查看@trec/app-modules@3.0.21声明的peerDependency中要求的@ngxs/store版本范围 - 将项目package.json中所有
@ngxs开头的依赖(包括@ngxs/store、@ngxs/devtools-plugin、@ngxs-labs/actions-executing)版本调整到上述兼容范围内,不要跨次版本升级 - 删除本地
node_modules文件夹和package-lock.json锁文件,重新执行npm install后再编译
- 先执行
- 升级@trec/app-modules到兼容NGXS 3.7.3的版本
查询@trec/app-modules的版本发布记录,找到明确适配Angular 12、支持@ngxs/store@3.7.x的最高版本,升级该依赖后重新安装依赖即可。注意不要升级到适配Angular 13及以上的版本,否则会触发其他Angular核心包的兼容性错误。 - 临时绕过编译检查(仅应急调试用,不推荐生产环境使用)
如果暂时无法调整两端版本,可以通过配置绕过类型检查快速验证功能,注意该方案存在运行时报错风险:- 先将本地Node升级到16.x、npm升级到8.x,满足项目engines的版本要求
- 在项目根目录的
tsconfig.json的compilerOptions配置项中添加"skipLibCheck": true,跳过对node_modules目录下所有d.ts类型文件的检查 - 在package.json根节点添加overrides配置,强制所有依赖使用你项目中声明的@ngxs/store版本:
"overrides": { "@ngxs/store": "$@ngxs/store" }- 清空
node_modules和锁文件后重新执行npm install再编译
- 回退版本
如果上述方案都无法快速落地,先将@ngxs/store及相关NGXS生态包回退到升级前的稳定可用版本,等@trec/app-modules发布兼容NGXS 3.7.3的版本后再执行升级。
内容的提问来源于stack exchange,提问作者Pierlu1586
相关产品推荐
相关产品推荐

