gpt4 book ai didi

javascript - 从 Angular 4 HTTP 调用获取完整响应(不仅仅是正文)

转载 作者:太空狗 更新时间:2023-10-29 18:24:47 24 4
gpt4 key购买 nike

我正在尝试从我的 HTTP 调用中获得完整的响应。根据 Angular 文档,我应该将我的 HTTP 调用 “选项” 设置为 {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[]>'.

我认为我对ObservablesTyping/Casting 的概念不是那么清楚。

我有一个 HTTP Get 请求返回一个 observable 并将其强类型化到一个项目数组中(见下文)

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;其中 item声明为 item: Item[]

Type 'Observable<HttpResponse<IItem[]>>' is not assignable to type 'IItem[]

所以我的问题是:

  1. 如何解决上述错误(以及为什么会出现此错误)?
  2. 这可能是个愚蠢的问题,但如果._http.get<IItem[]>已经设置了预期的响应“类型”,我还需要设置 getItems(): Observable <IItem[]> 吗?方法返回类型?

我认为我不理解导致这种混淆的一些基本概念。任何帮助将不胜感激。我是 Angular 4 的新手,所以请保持温和。

最佳答案

HttpClient.get方法被定义为使用泛型类型 T :

get<T>(url: string, options?: {
...
}): Observable<T>;

既然你通过了<IItem[]>get方法在这里 this._http.get<IItem[]>根据定义 get方法返回 HttpResponse<IItem[]>目的。但是你声明你的方法getItems返回 IItem[]因此你会得到错误:

Type 'Observable<HttpResponse<IItem[]>>' is not assignable to type 'Observable<IItem[]>'.

要修复它,您需要返回 IItem[] .这可以通过提取类型为 IItem[] 的正文来完成。来自 HttpResponse<IItem[]>并归还它。 do运算符(operator)不能返回任何东西,所以你必须使用 map运营商:

this._http.get<IItem[]>('url', {observe: 'response'})
.do(data => console.log('All: ' + JSON.stringify(data)))
.map(data => data.body)

关于javascript - 从 Angular 4 HTTP 调用获取完整响应(不仅仅是正文),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46955038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com