Angular 9.1.0项目angular-shepherd出现ɵɵFactoryDef类型参数错误
解决Angular 9.1.0中angular-shepherd@0.5.0的TS2314错误
这个问题我之前帮人排查过,核心原因是angular-shepherd@0.5.0的类型定义没适配Angular 9的ɵɵFactoryDef泛型要求——Angular 9的该工厂函数必须传2个类型参数,但这个版本的shepherd只传了1个,导致TypeScript编译报错。下面是几种按优先级排序的解决方法:
方法1:用patch-package打持久补丁(推荐)
这个方法能把修改固定下来,每次npm install后自动生效,不会丢失:
- 先安装
patch-package作为开发依赖:
npm install patch-package --save-dev
- 找到项目里的
node_modules/angular-shepherd/lib/shepherd.service.d.ts文件,定位到第64行,修改内容:
把
static ɵfac: i0.ɵɵFactoryDef<ShepherdService>;
改成
static ɵfac: i0.ɵɵFactoryDef<ShepherdService, never>;
(第二个参数never表示该服务没有构造函数依赖,符合Angular 9的API要求)
- 生成补丁文件:
npx patch-package angular-shepherd
执行后项目根目录会生成patches/angular-shepherd+0.5.0.patch文件,把这个文件提交到版本控制,其他开发者拉取代码后也能自动应用补丁。
- 在
package.json的scripts中添加postinstall钩子:
"scripts": { // 保留原有脚本... "postinstall": "patch-package" }
方法2:手动修改node_modules(临时方案)
如果只是临时测试,可以直接修改node_modules/angular-shepherd/lib/shepherd.service.d.ts的第64行(同方法1的修改内容),但注意每次执行npm install或npm update后,这个修改会被覆盖,需要重新操作。
方法3:尝试升级angular-shepherd
你可以尝试升级angular-shepherd到0.5.x的后续版本(比如0.5.1),看看官方是否已经修复了这个类型问题:
npm install angular-shepherd@0.5.1 --save
不过升级后一定要测试是否和你的Angular 9项目兼容,避免引入其他兼容性问题。
内容的提问来源于stack exchange,提问作者Alessandro Celeghin
相关产品推荐
相关产品推荐

