Angular8升级至9时报TS2339:unknown类型不存在get属性问题求助
报错原因
- RxJS版本不兼容:项目中安装的RxJS版本为7.3.0,而Angular 9官方适配的RxJS版本为6.x系列。RxJS 7对操作符的类型推断做了破坏性变更,未显式指定类型的流参数默认会被推断为
unknown类型,而非之前的any,因此TypeScript无法识别params上的get方法。 - 参数类型未显式声明:代码中未给
map操作符的入参显式指定ParamMap类型,触发了TypeScript的严格类型检查报错。 - 依赖版本不统一:package.json中Angular核心包为9.x版本,但@angular/cli、@angular/compiler-cli等配套依赖仍为8.x版本,跨版本依赖也会导致类型推断异常。
解决方案
以下方案可按需选择:
方案1:显式指定参数类型(快速修复当前报错)
给params参数显式声明ParamMap类型即可通过类型检查,修改后的代码如下:
// 未导入ParamMap的话先补充导入 import { ParamMap } from '@angular/router'; private paginate() { this.route.queryParamMap.pipe( map((params: ParamMap) => params.get('page')) ).subscribe(page => { if (page) { this.config.currentPage = Number(page); }; }); }
项目中同类报错都可以通过显式指定参数类型的方式快速修复。
方案2:降级RxJS到适配版本(推荐,解决根本问题)
将RxJS版本降级到Angular 9兼容的6.6.x版本:
- 修改package.json中dependencies下的rxjs版本配置:
"rxjs": "~6.6.7",
- 删除项目中的node_modules文件夹和包锁文件(package-lock.json/yarn.lock),重新执行
npm install安装依赖。
方案3:对齐Angular全量依赖版本
将所有Angular生态相关依赖的版本统一为9.x,避免跨版本冲突:
- 将@angular/cli、@angular/compiler-cli、@angular/language-service等配套依赖从8.x升级到和核心包一致的9.x版本
- 当前TypeScript 3.6.3版本符合Angular 9的适配要求,无需调整。
内容的提问来源于stack exchange,提问作者The White Knight
相关产品推荐
相关产品推荐

