我有一个REST API,在following structure中返回json数据-内容本身是inside a "data" node,因为有时会在请求中有额外的Meta信息(例如分页).

{
    "data": [
        {
            "id": 1,
            "title": "List 1"
        },
        {
            "id": 2,
            "title": "List 2"
        },
    ]
}

我使用Angular http客户端获取数据,如下所示:

getLists (): Observable<List[]> {
  return this._httpClient.get<List[]>('http://localhost/api/v1/lists').pipe(
    tap((response) => {
      this._lists.next(response)
    }),
  )
}

问题是--正如你可能已经知道的--response is not an array of elements of type "List"导致了elements are inside the "data" node.由于设置了泛型/预期返回类型,访问响应对象上的数据 node 内的内容也将不起作用.

有没有办法在get()方法上得到keep using the generic,然后得到access the content inside the "data" array,这样它就可以在List对象的数组中结束了?

推荐答案

最接近的方法(假设您想使用泛型)是定义一个Response类型,如下所示:

interface Response {
  data: List[]
}

然后,您可以将HTTP客户端更改为使用Response,并添加一个map阶段,这样您就可以获得数据:

getLists (): Observable<List[]> {
  return this._httpClient.get<Response>('http://localhost/api/v1/lists').pipe(
    map(item => item.data),
    tap((response) => {
      this._lists.next(response)
    })
  )
}

Typescript相关问答推荐

typescribe不能使用值来索引对象类型,该对象类型满足具有该值的另一个类型'

TypeScript Page Routing在单击时不呈现子页面(React Router v6)

如何缩小变量访问的对象属性范围?

有没有办法解决相互影响的路由之间的合并?

向NextAuth会话添加除名称、图像和ID之外的更多详细信息

React Typescript项目问题有Redux-Toolkit userSlice角色问题

是否可以从函数类型中创建简化的类型,go 掉参数中任何看起来像回调的内容,而保留其余的内容?

如何使用Geojson模块和@Types/Geojson类型解析TypeScrip中的GeoJSON?

TypeScrip:从对象中提取和处理特定类型的键

我可以使用typeof来强制执行某些字符串吗

如何通过属性名在两个泛型数组中找到匹配的对象?

无法缩小深度嵌套对象props 的范围

接口中可选嵌套属性的类型判断

如何在Reaction Native中关注屏幕时正确更新状态变量?

获取类属性的类型';TypeScript中的getter/setter

Route.ts文件中未导出HTTP方法

如何使对象同时具有隐式和显式类型

Karma Angular Unit测试如何创建未解析的promise并在单个测试中解决它,以判断当时的代码是否只在解决后运行

为什么 TypeScript 类型条件会影响其分支的结果?

如何让 Promise 将它调用的重载函数的类型转发给它自己的调用者?