Angular @当@Inject工作时,Injectable不工作

Angular @当@Inject工作时,Injectable不工作,angular,typescript,dependency-injection,Angular,Typescript,Dependency Injection,我遇到了一个奇怪的问题 我得到了非常简单的服务: import { Inject, Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; @Injectable() export class EchoService { constructor(private httpClient:

我遇到了一个奇怪的问题

我得到了非常简单的服务:

import { Inject, Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class EchoService {
   constructor(private httpClient: HttpClient) {}

   public makeCall(): Observable<any> {
       return this.httpClient.get<any>('https://jsonplaceholder.typicode.com/posts/1');
   }
}
在组件中:

import { Component, Inject, OnInit } from '@angular/core';
import { EchoService } from './services/echo.service';
import { Observable } from 'rxjs/Observable';

@Component({
 selector: 'my-app',
 templateUrl: `app.component.html`,
 styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
   public response: Observable<any>;

   constructor(private echoService: EchoService) {}

   public ngOnInit(): void {
       this.response = this.echoService.makeCall();
   }
}
 constructor(@Inject(EchoService) private echoService: EchoService) {}
我的tsconfig.json是:


怎么回事?为什么@Injectable不起作用,而@Injectable起作用?

请检查您的@NgModule声明,可能您错过了导入列表中的HttpClientModule。

如果我理解正确,您应该添加反射元数据库。
同样的情况。当我将项目从Angular 5迁移到7版本时。我的作品:

添加到tsconfig.json-emitDecoratorMetadata:true

完整的tsconfig.json:

{ 编译器选项:{ baseUrl:./src, 实验者:是的, 是的, sourceMap:true, 模块解决方案:节点, 目标:es2015, rootDir:/src, 类型根:[ 节点\模块/@类型 ], 库:[ es2018, 多姆 ], skipLibCheck:是的, 类型:[] }
}我的@NgModule中有HttpClientModule。正如我写的。。没有@inject,我不能注射任何东西。不仅仅是httpClient。我到处都在找这个。非常感谢。
 constructor(@Inject(EchoService) private echoService: EchoService) {}
{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [ "dom", "esnext" ]
  }
}