请问一下在ts文件中请求回来的数据为什么解构data取里面的属性值就报错说没有该类型?

作者站长头像
站长
· 阅读数 19

最近用 angular 必须在TS文件写,我想在返回来的数组对象增加一个新属性。打个比方我平常增加属性 data.forEach(item => item.check = false),但是在TS文件说我 ITEM.check 不存在,那我该如何才能增加新属性。还有一个问题问问大佬们,定义接口数据必须写到最深层吗,因为我每次想拿 data.item.source 就报错说没有该属性,但我定义了而且接口数组里面有。

这是数据结构TS图请问一下在ts文件中请求回来的数据为什么解构data取里面的属性值就报错说没有该类型?请问一下在ts文件中请求回来的数据为什么解构data取里面的属性值就报错说没有该类型?这是请求图请问一下在ts文件中请求回来的数据为什么解构data取里面的属性值就报错说没有该类型?报错图请问一下在ts文件中请求回来的数据为什么解构data取里面的属性值就报错说没有该类型?请问一下在ts文件中请求回来的数据为什么解构data取里面的属性值就报错说没有该类型?我修改成功了,但我不理解res.data.data不是一个数组吗那为什么我写observable<Datum[]>加个[]就报错,写Datum就能,他不是一个数组类型吗请问一下在ts文件中请求回来的数据为什么解构data取里面的属性值就报错说没有该类型?

回复
1个回答
avatar
test
2024-07-10

反向推测,Datum 中有 _source,那么 law_data$ 应该是 Datum[] 类型,那么 res.data 就是 Data 类型,res 就是 LawData 类型

所以看你的 law_data$ 是怎么声明的。另外,如果 res 的类型确定,可以直接声明为 res: LawData


searchLawData 的返回类型是 Observable<LawData[]>,所以对它调用 subscribe 中的 res 应该是 LawData[] 而不是 LawData

另外,报错说 LawData[] 上不存在 _source,说明 item 的类型是 LawData[] 而不是 LawData,那么 law_data$: Observable<Datum> 是怎么回事?

我模拟了 searchLawData,可以看到如下类型推断:

answer image

如果把它的返回类型改一下,把数组类型改成单体类型,就比较符合你需要的逻辑

answer image

但这样改的话,如果 http 请求返回的真的是一个数组,那 subscribe 里面的逻辑应该会有问题,它应该是处理一个数组,而不是一个单体。如果是处理数组,就不存在 res.data.data 这样的属性取值,至少应该有 res.forEach() 或者 res.map() 之类对数组进行处理的逻辑。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容