如何在Angular/TypeScript中正确导入抽象类与泛型?
解决方案
- 不要将抽象泛型基类加入任何Angular模块的
declarations/exports/providers数组
Angular的模块声明数组仅接受可实例化的组件、指令、管道、普通服务类,抽象类仅作为继承基类使用,直接在业务代码中导入继承即可,不需要在模块中注册。 - 移除抽象基类上的Angular专属装饰器
泛型抽象服务GenericService不需要加@Injectable装饰器,你需要为每个具体业务场景编写它的子类,仅给子类加@Injectable配置注入规则即可。同理抽象组件基类GenericComponent不需要加@Component或@Injectable装饰器,直接写纯TS抽象类就行,子类组件继承后自己加@Component装饰器。 - 修复不相关的依赖版本问题
你看到的@angular/compiler-cli相关报错和导入泛型类没有直接关系,是Angular依赖版本不匹配、TS类型配置缺失导致的:- 确认
package.json中所有@angular/开头的依赖版本号完全一致,不一致的话统一重装即可解决编译导出项不存在的报错 - 缺失
path模块类型的问题,执行npm i --save-dev @types/node,或者在tsconfig.json的compilerOptions中添加"types": ["node"]即可解决
- 确认
内容的提问来源于stack exchange,提问作者Ivan Yurchenko
相关产品推荐
相关产品推荐

