rov*_*red 16 angular angular-httpclient
使用HttpClient时,我在返回类型上遇到编译错误.在我的函数中GetPortfolio,我期望GET调用返回类型的json对象,Observable<Portfolio>但是它给出了错误:
类型Observable<HttpEvent<Portfolio>>不能分配给类型Observable<Portfolio>.类型HttpEvent<Portfolio>不能分配给类型Portfolio.类型HttpProgressEvent不能分配给类型Portfolio.属性name缺少类型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);
}
}
Run Code Online (Sandbox Code Playgroud)
从角度英雄教程和文档HttpClient请求应该期望Observable<any>:Angular HttpClient doc
我做错了什么?或者我应该将返回值设置为Observable<HttpEvent<Portfolio>>?
LLa*_*Lai 27
Typecast你的httpOptions
private httpOptions: {
headers: HttpHeaders
};
Run Code Online (Sandbox Code Playgroud)
打字稿编译器拉错了get方法类型(src)
/**
* Construct a GET request which interprets the body as JSON and returns the full event stream.
*
* @return an `Observable` of all `HttpEvent`s for the request, with a body type of `T`.
*/
get<T>(url: string, options: {
headers?: HttpHeaders | {[header: string]: string | string[]},
observe: 'events',
params?: HttpParams|{[param: string]: string | string[]},
reportProgress?: boolean,
responseType?: 'json',
withCredentials?: boolean,
}): Observable<HttpEvent<T>>;
Run Code Online (Sandbox Code Playgroud)
当您指定带有标题的类型时,它会提取正确的类型.(src)
/**
* Construct a GET request which interprets the body as JSON and returns it.
*
* @return an `Observable` of the body as type `T`.
*/
get<T>(url: string, options?: {
headers?: HttpHeaders | {[header: string]: string | string[]},
observe?: 'body',
params?: HttpParams|{[param: string]: string | string[]},
reportProgress?: boolean,
responseType?: 'json',
withCredentials?: boolean,
}): Observable<T>;
Run Code Online (Sandbox Code Playgroud)
小智 13
我解决了这个问题,像这样投射我的标题参数
return this.http.get<SomeModel>(someUrl, <Object>this.options);
Run Code Online (Sandbox Code Playgroud)
这很奇怪,如果你写的话不要给错误
GetPortfolio(portfolioId: string): Observable<Portfolio> {
return this.http.get<Portfolio>('....', {
headers: new HttpHeaders(
{
'Content-Type': 'application/json',
})
});
}
Run Code Online (Sandbox Code Playgroud)
看起来,编译器期望一个对象具有正确的头,参数,观察......,但由于你的对象没有类型,编译器可以接受它
即使你能做到
headers: HttpHeaders = new HttpHeaders({
'Content-Type': 'application/json',
})
GetPortfolio(portfolioId: string): Observable<Portfolio> {
return this.http.get<Portfolio>('...', {
headers: this.headers
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8166 次 |
| 最近记录: |