Angular @Injectable装饰器传参报错:预期0个参数却传入1个
为什么Angular 5中
@Injectable()装饰器不接受参数? 你遇到这个问题的核心原因是版本兼容性差异!
@Injectable({ providedIn: 'root' })这种带配置参数的写法是Angular 6及以后版本才引入的特性,主要是为了实现树摇优化(Tree-shaking),让未被使用的服务不会被打包进最终产物。而你当前使用的是Angular 5.2.10,这个版本的@Injectable()装饰器确实只支持无参数的写法,所以TypeScript会抛出TS2554的参数不匹配错误。
给你两种可行的解决办法:
方法一:适配Angular 5的传统写法
去掉@Injectable()的参数,转而在根模块(一般是AppModule)的providers数组中注册你的HeroService:// hero.service.ts import { Injectable } from '@angular/core'; @Injectable() // 这里不要添加任何参数 export class HeroService { constructor() { } // 你的服务逻辑代码 } // app.module.ts import { HeroService } from './hero.service'; @NgModule({ declarations: [/* 你的组件、指令等 */], imports: [/* 导入的模块 */], providers: [HeroService], // 在这里注册服务 bootstrap: [AppComponent] }) export class AppModule { }方法二:升级到Angular 6+版本
如果你想使用providedIn: 'root'的便捷特性,可以考虑升级你的Angular项目到6.x及以上版本。不过升级前建议先备份项目,同时注意配套依赖的兼容性——比如Angular 6要求TypeScript版本至少为2.7,你当前的TypeScript 2.5.3也需要同步升级。
另外补充:你当前用的Angular CLI 1.7.4是对应Angular 5的版本,如果升级框架,CLI也需要同步升级到对应Angular 6的版本(比如6.x系列)。
内容的提问来源于stack exchange,提问作者Atom
相关产品推荐
相关产品推荐

