我试图通过HTTP调用获得完整的响应。根据Angular文档,我应该将我的HTTP调用" options" 设置为{observe: 'response'}
如果我这样做,我会收到以下错误:
Type 'Observable<HttpResponse<IItem[]>>' is not assignable to type 'Observable<IItem[]>'. Type 'HttpResponse<IItem[]>' is not assignable to type 'IItem[]'. Property 'includes' is missing in type 'HttpResponse<IItem[]>'.
我认为我对 Observables &amp; 打字/投射并不清楚。
我有一个HTTP Get请求,它返回一个observable和Strong将它输入一个项目数组(见下文)
getItems(): Observable <IItem[]>{
return this._http.get<IItem[]>(url, {observe: 'response'})
.do(data => console.log('All: ' + JSON.stringify(data)))
};
我尝试设置getUsers(): Observable <HttpResponse<IUser[]>>
解决了上述错误,但在我subscribe
内我尝试将返回的数据分配给局部变量this.item = data;
时遇到以下错误{{1}声明为item
item: Item[]
所以我的问题是:
Type 'Observable<HttpResponse<IItem[]>>' is not assignable to type 'IItem[]
已经设置了预期的&#34;类型&#34;我还需要设置._http.get<IItem[]>
方法返回类型吗?我想我并不理解导致这种混淆的一些基本概念。任何帮助将不胜感激。我是Angular 4的新手,所以请保持温柔。
答案 0 :(得分:2)
T
方法定义为使用泛型类型get<T>(url: string, options?: {
...
}): Observable<T>;
:
<IItem[]>
因此,自从get
根据定义this._http.get<IItem[]>
方法get
方法返回HttpResponse<IItem[]>
方法后,getItems
方法将IItem[]
传递给IItem[]
方法。但是,您声明方法IItem[]
以返回HttpResponse<IItem[]>
,因此您会收到错误:
输入'Observable&lt; HttpResponse&lt; IItem []&gt;&gt;'不能分配给类型 '可观察&LT;的iItem [] GT;'。
要解决此问题,您需要返回do
。这可以通过从map
中提取this._http.get<IItem[]>('url', {observe: 'response'})
.do(data => console.log('All: ' + JSON.stringify(data)))
.map(data => data.body)
类型的主体并将其返回来完成。 public class Example implements Comparable {
private String identifier;
private List<Integer> list;
// constructors
// getters
@Override
public int compareTo(Object other){
if(this.list.head() > other.list.head()) return 1;
if(this.list.head() < other.list.head()) return -1;
else return 0;
}
}
运算符无法返回任何内容,因此您必须使用stringsAsFactors = FALSE
运算符:
urls <- data.frame(c("https://ec.europa.eu/consumers/consumers_safety/safety_products/rapex/alerts/?event=viewProduct&reference=1212/08",
"https://ec.europa.eu/consumers/consumers_safety/safety_products/rapex/alerts/?event=viewProduct&reference=1212/09",
"https://ec.europa.eu/consumers/consumers_safety/safety_products/rapex/alerts/?event=viewProduct&reference=1213/07",
"https://ec.europa.eu/consumers/consumers_safety/safety_products/rapex/alerts/?event=viewProduct&reference=1213/08",
"https://ec.europa.eu/consumers/consumers_safety/safety_products/rapex/alerts/?event=viewProduct&reference=1213/09",
"https://ec.europa.eu/consumers/consumers_safety/safety_products/rapex/alerts/?event=viewProduct&reference=1214/07",
"https://ec.europa.eu/consumers/consumers_safety/safety_products/rapex/alerts/?event=viewProduct&reference=1214/08",
"https://ec.europa.eu/consumers/consumers_safety/safety_products/rapex/alerts/?event=viewProduct&reference=1214/09"),
stringsAsFactors = FALSE)
答案 1 :(得分:1)
这应该有效:
getItems(): Observable <IItem[]>{
return this.http
.get<IItem[]>(url, {observe: 'response'})
.do(data => console.log('All: ' + JSON.stringify(data)))
.map( (r: HttpResponse<IItem[]> ) => r.body )
};