Angular &引用;没有与此调用匹配的重载“;在第11页
我正在做一个角度教程,当我在Angular &引用;没有与此调用匹配的重载“;在第11页,angular,typescript,Angular,Typescript,我正在做一个角度教程,当我在home.component.ts文件中遇到以下错误时: 没有与此调用匹配的重载。 重载第1个(共5个),(观察者?:PartialObserver):订阅”,出现以下错误。 类型为“(data:any[])=>void”的参数不能分配给类型为“PartialObserver”的参数。 属性“complete”在类型(数据:any[])=>void中丢失,但在类型“CompletionObserver”中是必需的。 重载第2个,共5个,'(下一个?:(值:HttpRe
home.component.ts
文件中遇到以下错误时:
没有与此调用匹配的重载。
重载第1个(共5个),(观察者?:PartialObserver):订阅”,出现以下错误。
类型为“(data:any[])=>void”的参数不能分配给类型为“PartialObserver”的参数。
属性“complete”在类型(数据:any[])=>void中丢失,但在类型“CompletionObserver”中是必需的。
重载第2个,共5个,'(下一个?:(值:HttpResponse)=>void,错误?:(错误:任意)=>void,完成?:()=>void):订阅',出现以下错误。
类型为“(data:any[])=>void”的参数不能分配给类型为“(value:HttpResponse)=>void”的参数。
参数“数据”和“值”的类型不兼容。
类型“HttpResponse”缺少类型“any[]”中的以下属性:长度、弹出、推送、concat等
我已经查过了,但是找不到任何解决这个问题的办法。我曾尝试在tsconfig.json
中禁用strict
、noImplicitAny
、noImplicitReturns
,但他们没有解决此问题。我更倾向于在tsconfig.json
文件中将所有三个设置保持在true
的同时,是否有解决此问题的方法
任何帮助都将不胜感激
谢谢
编辑:在AJAX调用后处理数据时,在home.component.ts
文件中发生错误:
this.dataService.sendGetRequest().subscribe(data: any[] => {
this.products = data;
});
}
第一:如果你把你的相关代码放在问题本身,而不仅仅是stackblitz的链接,那将是一种礼貌。错误消息给您的第一个信息是:哪个文件、哪个行、哪个位置(
src/app/home/home.component.ts(19:49)
)。那是
this.dataService.sendGetRequest().subscribe((data: any[]) => {
// ^ about here
第二:在HttpClient调用中放入观察:“response”
。在这种情况下,您不会在响应对象中获得简单的数据:any[]
,而是一个完整的HttpResponse
对象。您需要访问其主体
属性。我建议加上
map({ body } => body)
在
DataService
中的sendGetRequest
中的管道末端,解决方案:在subscribe
方法中将any[]
更改为any
this.dataService.sendGetRequest().subscribe(data: any => {
this.products = data;
});
}
永远不要指定回调参数的类型
.subscribe((数据:any[])=>
比无意义更糟糕。Write.subscribe(data=>
有效。谢谢。首先,是的,你是正确的。我应该把相关的代码放在问题中。对此我深表歉意。关于在管道末端添加映射,你的意思是将其链接到管道上吗?抱歉,但我是RxJS新手。谢谢。@MA_Dev是的,只需在重试后添加映射作为最后一个操作符即可
,catchError
和tap
。我做了以下操作,但它返回未定义的:返回this.httpClient.get(this.REST_API_服务器,{params:new HttpParams({fromString:“\u page=1&\u limit=20”}),观察:“response”})。管道(重试(3),catchError(this.handleError),tap(res=>{this.parseLinkHeader)(res.headers.get('Link');})、map(res=>{res.body}));
我做错了什么?感谢map(res=>{res.body})
-如果您这样编写,JS引擎会将{}
解释为函数体的分隔符(并且它没有显式的返回语句)。或者map(res=>{return res.body;})
,或者干脆map(res=>res.body)
。它成功了。非常感谢您的帮助。