Angular 2属性类型不存在

时间:2017-11-17 18:18:23

标签: angular

我有一个类似

export class R {
constructor(
    public id: Number,
    public dte: Date,
    ) { }

}

返回R []代码的服务就像:`

return this.http.get(this.serverLocal).map(this.formatDate);

  formatDate(res: Response) {
    const data = res.json() as R[];
        data.forEach(D => {
        D.dte = new Date(D.dte);
    })
    return data;
}

我得到了2个错误:'R'类型中不存在属性'dte'。 我改变了很多代码无济于事。如果我使用ID进行一些更改,但是没有使用dte日期,它会起作用。我做错了什么?

1 个答案:

答案 0 :(得分:1)

在回答之前,如果您使用的是Angular 5,请查看HttpClient,因为不再需要json()。 http get在默认情况下已经返回了一个json。

如果您的json响应只有这两个条目(iddte),您只需执行以下操作:

. . .

import { HttpClient } from '@angular/common/http';

/** rxjs **/
import { Observable } from 'rxjs/Observable';

getStuff(someUrl: string): Observable<Array<R>> {
    return this.http.get(someUrl);
}

如果您需要一些错误处理,或者例如,如果请求出错,请重试,您应该执行以下操作:

. . .

import { HttpClient } from '@angular/common/http';

/** rxjs **/
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';
import {catchError} from 'rxjs/operators/catchError';

getStuff(someUrl: string): Observable<Array<R>> {
    return this.http.get(someUrl)
        .pipe(
            retryWhen(errors =>
                // Do Stuff
            ),
            catchError((error: Error)  => {
                return Observable.throw(error);
            })
        );
}

没有实际需要映射数据,但是,如果你想这样做,你应该像“:

data.map((dataEntry) => new R(dataEntry))

如果您仍在使用Angular 4.x.x,那么您应该使用:

. . .

import { Http } from '@angular/http';

/** rxjs **/
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';
import {catchError} from 'rxjs/operators/catchError';

getStuff(someUrl: string): Observable<Array<R>> {
    return this.http.get(someUrl)
        .pipe(
            map((response: Response) => response.json()),
            catchError((error: Error)  => {
                return Observable.throw(error);
            })
        );
}