【问题标题】:Angular 2 Property Does not exist on typeAngular 2 属性在类型上不存在
【发布时间】:2018-05-01 14:24:24
【问题描述】:

我有一个类似的类

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 日期进行更改,它会起作用。我做错了什么?

【问题讨论】:

  • 可以记录数据吗?
  • 是的,服务工作正常,我得到了 450 条记录
  • 你能在 stackblitz 中复制这个问题吗
  • 这是一个漫长的过程,类有更多的字段等,但错误只出现在 DTE 中。没有 DTE 代码,我可以调试我的代码,甚至可以手动执行 R.Dte = new Date(R.Dte)

标签: angular


【解决方案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);
            })
        );
}

【讨论】:

    猜你喜欢
    • 2016-12-01
    • 2017-02-13
    • 2017-04-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 2018-07-12
    • 2021-12-01
    • 2016-08-25
    相关资源
    最近更新 更多