You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:31:26