Javascript 以角速度访问可观测对象

Javascript 以角速度访问可观测对象,javascript,angular,typescript,Javascript,Angular,Typescript,我目前正在通过一些教程学习Angular,我遇到了一个问题。我不太明白为什么我的控制台给了我错误 src/app/employee/employee.component.ts:17:24中的错误-错误TS2322:类型“IEEmployee”不可分配给类型“any[]”。17.订阅(数据=>this.employees=data) 这是我在教程中遵循的代码: export class EmployeeDetailComponent implements OnInit { public em

我目前正在通过一些教程学习Angular,我遇到了一个问题。我不太明白为什么我的控制台给了我错误
src/app/employee/employee.component.ts:17:24中的错误-错误TS2322:类型“IEEmployee”不可分配给类型“any[]”。17.订阅(数据=>this.employees=data)
这是我在教程中遵循的代码:

export class EmployeeDetailComponent implements OnInit {

  public employees = [];

  constructor(private _employeeService : EmployeeService) { }

  ngOnInit(): void {
    this._employeeService.getEmployees()
    .subscribe(data => this.employees = data);
    console.log(this.employees);
  }

}
Http请求应该返回observable,带有我创建的IEEmployees接口类型,但除非我这样做,否则它不会工作。
public employees:any=[]
。这确实解决了我的问题,但我不明白为什么,因为在教程中它没有它就可以工作。我的第二个问题是,当我使用http请求获取数据后,试图控制台记录我的employees数组,以查看它是什么类型的数据,但它似乎是空的(我尝试了
this.employees[0].name
)。为什么我不能在
ngOnInit()
中访问该数组,但在我的html文件中,我可以使用
ngFor
访问对象属性。 这是IEEmployees接口

export interface IEmployee {
    id: number,
    name: string,
    age : number
}

在声明employees数组时

这样做

公共雇员:IEEmployee=[]

而不是这个

公共雇员=[]


这是因为您的服务正在重新调整类型为
IEEMPLOYEE
的数据,而您在声明employees数组时使用的变量不是该类型的

这样做

公共雇员:IEEmployee=[]

而不是这个

公共雇员=[]


这是因为您的服务正在重新调整类型为
IEEMPLOYEE
的数据,而您正在使用的变量不是该类型的。因此
this.employees
的值将在
ngOnInit
完成后分配。
ngFor
还能够在异步响应到达后显示属性值。

。因此
this.employees
的值将在
ngOnInit
完成后分配。
ngFor
还能够在异步响应到达后显示属性值。

您似乎不确定是要接收单个Employee对象还是一个Employee数组

您已经在Employee服务中声明了getEmployees方法以返回一个可观察的

如果您的API返回一个Employees数组,请更改getEmployees方法,使其返回一个可观察的值

如果API返回单个Employee对象,请将arrow函数更改为以下内容: data=>this.employees=[data]

要另外将输出记录到控制台,请将箭头功能更改为:
data=>{console.log(data);//设置this.employees;}

您似乎不确定是要接收单个Employeer对象还是一个employees数组

您已经在Employee服务中声明了getEmployees方法以返回一个可观察的

如果您的API返回一个Employees数组,请更改getEmployees方法,使其返回一个可观察的值

如果API返回单个Employee对象,请将arrow函数更改为以下内容: data=>this.employees=[data]

要另外将输出记录到控制台,请将箭头功能更改为:
data=>{console.log(data);//set this.employees;}

我忘了提到这一点,但是我已经试过了,beofre,我在src/app/employee/employee.component.ts:12:10中得到了这个错误-错误TS2739:Type'undefined[]缺少类型'IEEmployeee'中的以下属性:id,name,12岁公共雇员:IEEmployeee=[]`然后检查,您的服务返回的数据属性和您声明的接口之间一定存在一些差异。我忘了提到这一点,但我已经尝试过了。beofre,我得到了这个“src/app/employee/employee.component.ts:12:10中的错误-错误TS2739:Type”未定义[]'缺少类型“IEmployee”中的以下属性:id、姓名、年龄12岁的公共雇员:IEmployee=[]`然后检查,您的服务返回的数据的属性和您声明的接口之间一定存在一些差异,这是有道理的,所以如果我想处理这些数据,我只能在subscribe方法中进行操作?是的,在收到响应时调用
subscribe
的内容。您可以在那里操作接收到的数据。啊,这是有道理的,所以如果我想操作这些数据,我只能在subscribe方法中进行操作?是的,在接收到响应时调用
subscribe
的内容。您可以在那里操作接收到的数据。