You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中修改http.get泛型参数映射响应为Hero数组报错如何解决

问题解答

报错原因

Angular 中 this.http.get<T>() 的泛型参数 T 用于声明服务端返回的响应体的实际类型。你修改代码时将泛型指定为 Hero[],等于主动告诉 TypeScript 该接口直接返回英雄数组,但结合你给出的服务端响应结构可以确认,接口返回的根对象是携带 _embedded 字段的 EmbeddedResponse 类型,并非直接的英雄数组。
此时上游 Observable 的类型被你错误声明为 Observable<Hero[]>,但后续 map 操作符却把输入参数定义为 EmbeddedResponse 类型,二者类型不匹配,因此 TypeScript 抛出类型校验错误,提示 Hero[] 类型上不存在必填的 _embedded 属性。

解决方法

直接将 http.get 的泛型参数指定为你已经定义好的 EmbeddedResponse 类型即可,既不需要用 any 绕过类型校验,也不需要错误指定为 Hero[]。
另外你原有代码存在语法小问题:catchError 被误写在了 tap 的参数中,二者属于平级的操作符,需要都放在 pipe 的参数列表里,修正后的完整代码如下:

getHeroes(): Observable<Hero[]> {
  const heroes = this.http.get<EmbeddedResponse>(this.heroesUrl)
    .pipe(
      map((res: EmbeddedResponse) => res._embedded.heroes),
      tap(data => this.log('HeroService: fetched Heroes')),
      catchError(this.handleError<Hero[]>('getHeroes', []))
    )
  return heroes
}

内容的提问来源于stack exchange,提问作者Vultimitavin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:27:02