Javascript 这不会访问http响应对象:类型对象上不存在属性

Javascript 这不会访问http响应对象:类型对象上不存在属性,javascript,angular,typescript,ecmascript-6,Javascript,Angular,Typescript,Ecmascript 6,我有一个响应对象,我刚刚分配给“this”对象 如果我访问datacentersinfo对象,则类型对象上不存在属性datacentersinfo。由于此错误,我无法生成dist文件夹 我建议您使用强类型object,并执行以下操作 import { Injectable } from '@angular/core'; import { Http, Headers, RequestOptions, Response, ResponseContentType } fro

我有一个响应对象,我刚刚分配给“this”对象


如果我访问
datacentersinfo
对象,则类型对象上不存在属性
datacentersinfo
。由于此错误,我无法生成dist文件夹

我建议您使用强类型object,并执行以下操作

import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, 
             Response, ResponseContentType } from '@angular/http';

GetAllCriteria(): Observable<Array<ClassName>> {
    let headers = new Headers({
        'Content-Type': 'application/json'
    });
    let options = new RequestOptions({ headers: headers });
    return this._http.get(this.apiUrl + "/GetAllCriteria",
                       options).subscribe(response => response.json());
}
从'@angular/core'导入{Injectable};
导入{Http,头,请求选项,
响应,ResponseContentType}来自“@angular/http”;
GetAllCriteria():可观察{
让标题=新标题({
“内容类型”:“应用程序/json”
});
let options=newrequestoptions({headers:headers});
返回此。\u http.get(this.apiUrl+“/GetAllCriteria”,
订阅(response=>response.json());
}

您有几种解决方案:

1-将您的数据键入任意,不要将其实例化:

private data: any;
2-改变你的状况:

if(this.data && this.data.datacentersinfo && this.data.datacentersinfo.length) {}

这将解决您的问题

我将发布两种方法来实现这一点。首先是旧方法(看起来像是您正在尝试的方法),然后是使用HTTP客户端的首选方法

旧HTTP

private data: Object = {};
this.http.post('url', { })
    .map((res: Response) => res.json())
    .subscribe((res:any) => {
        console.log(res);
        this.data = res;
        if(this.data.datacentersinfo.length) {}
});
HTTP客户端

private data: Object = {};
    this.http.post<any>('url', { })            
        .subscribe((res:any) => {
            console.log(res);
            this.data = res;
            if(this.data.datacentersinfo.length) {}
    });
私有数据:Object={};
this.http.post('url',{})
.订阅((res:any)=>{
控制台日志(res);
这个数据=res;
if(this.data.datacentersinfo.length){}
});

我这样做并不是最好的方式,您应该创建一个处理HTTP请求的服务组件,然后从该组件调用该服务并订阅它的响应。

如果他使用的是HttpClient,它将无法工作。@trichetriche-在顶部导入时添加此项{Http,Headers,RequestOptions,Response,ResponseContentType}来自“@angular/Http”;@trichetriche-为什么?你认为没有数据..或者它是空的..这是必需的我认为res.json();将行json数据转换为类型为ScriptNo的对象,因为Angular会反对Http模块而支持HttpClient,HttpClient已经解析了对json的响应。这在他们的Http指南中:)请参见@Wesley的答案,他解释了!dist已生成!!
private data: Object = {};
    this.http.post<any>('url', { })            
        .subscribe((res:any) => {
            console.log(res);
            this.data = res;
            if(this.data.datacentersinfo.length) {}
    });