错误TS2554:期望1个参数,但得到0。Angular6

时间:2018-09-05 19:08:51

标签: angular angular6

我遇到了这个问题,我的应用运行正常,但是此错误在IDE中显示。

employee.service.ts:

import { Injectable } from '@angular/core';
@Injectable({
  providedIn: 'root'
})
export class EmployeeService {
getEmployee(){
  return [
    {"id":1,"name":"Micheal","age":21},
    {"id":2,"name":"Jackson","age":22},
    {"id":3,"name":"Hales","age":23},
    {"id":4,"name":"Moz","age":25}
  ];
}
  constructor() { }
}

和我的employeeDetail.ts文件是这样的:

import { Component, OnInit } from '@angular/core';
import { EmployeeService } from '../services/employee.service';

@Component({
  selector: 'employee-detail',
  templateUrl: './employee-detail.component.html',
  styleUrls: ['./employee-detail.component.css']
})
export class EmployeeDetailComponent implements OnInit {

  public employees = [];
  constructor(private _employeeService : EmployeeService) {

   }

  ngOnInit() {
    this.employees = this._employeeService.getEmployee();
  }

}

这是Employee-list.ts

import { Component, OnInit } from '@angular/core';
import {HttpClientModule} from '@angular/common/http';
import { EmployeeService } from '../services/employee.service';

@Component({
  selector: 'employee-list',
  templateUrl: './employee-list.component.html',
  styleUrls: ['./employee-list.component.css']
})
export class EmployeeListComponent implements OnInit {

  public employees = []



  constructor(private _employeeService : EmployeeService) { 


  }

  ngOnInit() {
    this.employees = this._employeeService.getEmployee();
  }

}

我该如何解决这个问题?实际问题是什么?由于我是angular6的新手,所以我无法找出错误,请对此进行解释。谢谢。

6 个答案:

答案 0 :(得分:1)

这似乎与新的Angular编译器选项fullTemplateTypeCheck有关,如果在tsconfig文件中将该选项设置为true,则会出现错误。

这是tsconfig.app.json文件的一个示例,该文件再现了构建错误:

{  
  "extends": "../tsconfig.json",  
  "compilerOptions": {  
    "outDir": "../out-tsc/app",  
    "baseUrl": "./",  
    "module": "es2015",  
    "types": []  
  },

  "angularCompilerOptions": {  
     "fullTemplateTypeCheck": true  
  },  
  "exclude": [  
    "test.ts",  
    "**/*.spec.ts"  
  ]  
}

答案 1 :(得分:1)

这是有效的错误,并非由fullTemplateTypeCheck编译选项引起的。当您创建类的对象使用Angular可注入对象的实例时,就会发生这种情况。如果您切换到将类用作可注射剂,则可以解决。

这是一个可行的例子。假设我们有一个服务类,如下所示:

服务等级

/**
 * First Service
 */
import { Injectable } from '@angular/core';
import { SecondService } from './second-service';

@Injectable({
  providedIn: 'root',
})
export class FirstService {
  constructor(public secondService: SecondService) {
    ...
  }
}

如果您尝试通过new FirstService()在其他服务或组件中使用它,则会看到错误。

损坏

/**
 * Third Service
 */
import { Injectable } from '@angular/core';
import { FirstService } from './first-service';

@Injectable({
  providedIn: 'root',
})
export class ThirdService {
  firstService: any;

  constructor() {
    this.firstService = new FirstService();
  }
}

发生错误error TS2554: Expected X arguments, but got 0.是因为如果您尝试像这样直接实例化可注入类确实,则有参数。如果将它用作Angular注射剂,则不再是问题。

已修复

/**
 * Third Service
 */
import { Injectable } from '@angular/core';
import { FirstService } from './first-service';

@Injectable({
  providedIn: 'root',
})
export class ThirdService {
  constructor(public firstService: FirstService) {
    ...
  }
}

使用FirstService作为角度@Injectable解决了这个问题。

@intotecho的答案对于确定这一点非常有帮助。

答案 2 :(得分:0)

我看不到您的代码有任何问题,因为我认为您应该使用Ctrl + C停止申请

然后执行 ng serve

无论如何,原因是,您的getEmployee方法仍然需要传递一个参数,只需确保将代码保存在服务部分即可。

答案 3 :(得分:0)

使用Angular8,我在这一行有相同的错误触发器:

private configService= new ConfigService();

根据演示,ConfigService在其中使用HttpClient的地方。

我正在用new构建组件内部的服务,并且需要HttpClient作为实例化服务的参数。

@Component({
  selector: 'app-main',
  templateUrl: './main.component.html',
  styleUrls: ['./main.component.css' ],
})
export class MainComponent {
  private dataService= new ConfigService();
}

更改为此,错误消失。请注意添加了行提供程序:[ConfigService]

@Component({
  selector: 'app-main',
  templateUrl: './main.component.html',
  styleUrls: ['./main.component.css' ],
  providers: [ConfigService]
})
export class MainComponent {
  private dataService: ConfigService;
}

希望这会有所帮助。

答案 4 :(得分:0)

有时您在函数中丢失了一个参数,它在本地构建时可以正常工作,但对于生产构建,它会查找该参数并引发缺少参数的错误。

答案 5 :(得分:0)

这是来自我的 Angular 11 经验,尽管该解决方案可能适用于其他版本。我不小心在我的打字稿中向 onSubmit() 添加了一个参数,当时我的标记没有传递任何参数。

我所要做的就是从 onSubmit() 中删除未使用/不需要的参数。