期望可观察的< HttpEvent< any>的Angular HttpClient返回而不是可观察到的任何 [英] Angular HttpClient return expecting observable<HttpEvent<any> rather than observable<any>
问题描述
使用HttpClient时,返回类型出现编译错误.在我的函数GetPortfolio
中,我期望GET
调用返回类型为Observable<Portfolio>
的json对象,但它给出了错误:
I'm getting a compilation error on the return type when using HttpClient. In my function GetPortfolio
, I'm expecting the GET
call to return the json object of type Observable<Portfolio>
but it's giving the error:
类型Observable<HttpEvent<Portfolio>>
不可分配给类型Observable<Portfolio>
.类型HttpEvent<Portfolio>
不能分配给类型Portfolio
.类型HttpProgressEvent
不可分配给类型Portfolio
.类型HttpProgressEvent
中缺少属性name
.
Type Observable<HttpEvent<Portfolio>>
is not assignable to type Observable<Portfolio>
. Type HttpEvent<Portfolio>
is not assignable to type Portfolio
. Type HttpProgressEvent
is not assignable to type Portfolio
. Property name
is missing in type HttpProgressEvent
.
我的代码:
import { Injectable } from '@angular/core';
import { environment } from './environments/environment';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
export interface Portfolio {
name: string;
id: string;
}
@Injectable()
export class PortfolioService {
private httpOptions;
apiUrl: string;
constructor(private http: HttpClient) {
this.apiUrl = environment.apiUrl + "/api/portfolios";
this.httpOptions = {
headers: new HttpHeaders(
{
'Content-Type': 'application/json',
})
};
}
GetPortfolio(portfolioId: string): Observable<Portfolio> {
return this.http.get<Portfolio>(this.apiUrl + '/${portfolioId}', this.httpOptions);
}
}
Angular英雄教程和文档中的HttpClient请求应该是Observable<any>
: Angular HttpClient文档
From the angular hero tutorial and docs HttpClient requests should expect Observable<any>
: Angular HttpClient doc
那么我做错什么了吗?还是应该将返回值设置为Observable<HttpEvent<Portfolio>>
?
So am I doing something wrong? Or should I be setting the return value to Observable<HttpEvent<Portfolio>>
?
推荐答案
很奇怪,如果您编写,不要给出错误
It's strange, don't give error if you write
GetPortfolio(portfolioId: string): Observable<Portfolio> {
return this.http.get<Portfolio>('....', {
headers: new HttpHeaders(
{
'Content-Type': 'application/json',
})
});
}
看起来,编译器希望对象具有适当的标头,参数,观察...,但是由于您的对象没有类型,因此编译器可以接受
It's look like, the compiler expect an object with the properites headers,params,observe..., but as your object have no type, the compiler can accept it
即使你可以做
headers: HttpHeaders = new HttpHeaders({
'Content-Type': 'application/json',
})
GetPortfolio(portfolioId: string): Observable<Portfolio> {
return this.http.get<Portfolio>('...', {
headers: this.headers
})
}
这篇关于期望可观察的< HttpEvent< any>的Angular HttpClient返回而不是可观察到的任何的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!