Свойство Angular 2 не существует для типа

У меня есть класс как

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 ошибки: свойство "dte" не существует для типа "R". Я изменил много кода безрезультатно. Это работает, если я делаю некоторые изменения с ID, но не с датой даты. Что я делаю неправильно?

1 ответ

Решение

Прежде чем ответить, посмотрите на HttpClient, если вы используете Angular 5 в качестве json() больше не нужно. Http get уже возвращает json по умолчанию.

Если ваш ответ JSON имеет только эти две записи (id а также dte) вам просто нужно сделать следующее:

. . .

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.xx, вы должны получить:

. . .

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);
            })
        );
}
Другие вопросы по тегам