Angular 角度8中可观察到的类型铸造问题

Angular 角度8中可观察到的类型铸造问题,angular,casting,angular-httpclient,rxjs-observables,Angular,Casting,Angular Httpclient,Rxjs Observables,嗨,我正在学习Angular 8,作为一名学习者,我有很多疑问。我详细地分享了我的一个疑问。我希望你们中的一些人能很容易地帮助和纠正我 我有一个服务,它使用Web API并返回一些公司详细信息,如 0: {CompanyId: 1, Name: "xxxx", Address: "bn"} 1: {CompanyId: 2, Name: "yyyy", Address: "tv"} 服务台 GetAll(): Observable<IEmployee>{ return this.h

嗨,我正在学习Angular 8,作为一名学习者,我有很多疑问。我详细地分享了我的一个疑问。我希望你们中的一些人能很容易地帮助和纠正我

我有一个服务,它使用Web API并返回一些公司详细信息,如

0: {CompanyId: 1, Name: "xxxx", Address: "bn"}
1: {CompanyId: 2, Name: "yyyy", Address: "tv"}
服务台

GetAll(): Observable<IEmployee>{
return this.httpClient.get<IEmployee>(this.apiUrl + "GetCompany_test").}
GetAll(): Observable<IEmployee>{
return this.httpClient.get<any>(this.apiUrl + "GetCompany_test").}
IEEMPLOYEE.ts

export interface IEmployee{
fullName:string,
Email:string,
Mobile:string,
City:string,
HireDate:Date
}
即使我使用了
Observable
的Observable,我也能得到公司的详细信息。那么,这里的铸造需要什么呢?当我转换到Employee并且我很容易获得非Employee数据时,它应该在控制台中给我一些警告或错误,对吗?我对正在发生的事情完全感到困惑

请有人帮我理解铸造的概念,并建议我正确使用铸造


问候。

在其他用途中,铸造基本上是为了让intellisense帮助您。 当您调用这个get方法并将其传递给
IEmployee
类型时,您基本上说的是,'嘿,intellisense,我期待类型
IEmployee
的结果'。因此,当您订阅结果,然后尝试访问其属性时,它将为您提供
IEmployee
中定义的属性。Intellisense或
get
方法无法事先确定要返回的内容。因此,如果您也不知道,您可以将
any
类型传递给它,这就像说,“我不知道结果将返回什么类型”,因此在这种情况下,您无法进行任何类型检查,因为类型可以是
any

现在让我们假设,你得到了结果,在看到它之后,它看起来像你已经拥有的
类型,因此你可以将它转换为该类型,然后Intellisense可以介入,因为现在,它知道了类型。
那么让我们说:

服务台

GetAll(): Observable<IEmployee>{
return this.httpClient.get<IEmployee>(this.apiUrl + "GetCompany_test").}
GetAll(): Observable<IEmployee>{
return this.httpClient.get<any>(this.apiUrl + "GetCompany_test").}
//组成部分2:

service.GetAll().subscribe((x:IEmployee) => {
// x has a type here so there is type checking.
// Intellisense can help you out here
});

请将
this.httpClient.get(this.apirl+“GetCompany\u test”)
替换为
this.httpClient.get(this.apirl+“GetCompany\u test”,{“observe”:“body”})
再试一次,看看它是否抛出任何错误?控制台中没有错误。响应仍然相同。