属性“forEach”在类型“Object”上不存在

Property 'forEach' does not exist on type 'Object'

提问人:Jordan 提问时间:9/22/2017 最后编辑:Jordan 更新时间:5/21/2021 访问量:27713

问:

我一辈子都无法弄清楚为什么我不能循环这个 http 调用的响应。无论出于何种原因,它都在抱怨 of 的类型是一个对象,但是当我控制台记录它时,我可以像我期望的那样使用数组。data

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { URLSearchParams } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';

promises.push(Observable.create(observer => {
    this.http.post(`items/event/${this.event.auction_code}`, body.toString(), {
        headers: new HttpHeaders().set('Content-Type', 'application/X-www-form-urlencoded' ),
    }).subscribe(data => {
       var classifiedData;
       data.forEach((item)=>{
          classifiedData.push(new Item(item));
       });
       observer.next(data);
       observer.complete();
    },error => {
       observer.throw(error);
    });
}));
...
Observable.forkJoin(promises).subscribe(results => {
   results.forEach((result,i)=>{
      data.content.template[i].data = result;
   });
});

编辑:

Console.log向我展示了这个

enter image description here

编辑:2

我还有一个拦截器设置,这可能是导致的吗?

@Injectable()
export class NoopInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const duplicate = req.clone({
      url: `${environment.apiUrl}/${req.url}`,
      params: req.params.set('key', environment.apiKey)
    });
    return next.handle(duplicate);
  }
}
Angular 打字稿 RXJS

评论

2赞 Günter Zöchbauer 9/22/2017
似乎不是您期望的数组。什么是打印?console.log(data)
0赞 Jordan 9/22/2017
我仍然得到.正如我所提到的,控制台注销会在控制台中显示一个数组。Property 'map' does not exist on type 'Object'.data
0赞 Jordan 9/22/2017
使用我在控制台中看到的内容的屏幕截图更新了问题
0赞 Petter Friberg 9/22/2017
乔丹,如果只是错别字问题,请考虑删除它。
1赞 Jordan 9/22/2017
所以我实际上想知道 Visual Studio 和 CLI 如何知道从该端点返回的数据不是数组?因为当我从服务器查看实际数据时,它看起来是一个正确的数组

答:

32赞 lenilsondc 9/22/2017 #1

它要求你为请求提供一个显式类型,如下所示:

this.http.post<any[]>('...

根据 Angular HttpClient 指南,从 JSON 解析后不知道它是什么,所以它假设为响应类型,所以打字稿抱怨这一点。HttpClientObject

1赞 SushiGuy 5/21/2021 #2

对象可能缺少显式数组语法。例如,如果此行上有错误

this.subscriptions.forEach(...);

检查定义“订阅”的位置

以前

private subscriptions: Subscription;

private subscriptions: Subscription[];