Angular 2 属性在类型上不存在

Posted

技术标签:

【中文标题】Angular 2 属性在类型上不存在【英文标题】:Angular 2 Property Does not exist on type 【发布时间】: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) 【参考方案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);
            )
        );

【讨论】:

以上是关于Angular 2 属性在类型上不存在的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2:“Observable<Response>”类型上不存在属性“toPromise”

Angular 4 属性在构建时类型对象上不存在

类型“AbstractControl”Angular 4 上不存在属性“控件”[重复]

类型上不存在 Angular2 属性

Angular 12 - 传单:传单路由处理问题 - 类型“类型导入”上不存在属性“路由”

Ionic angular prod 编译器错误属性“md”在类型上不存在