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 响应只有这两个条目(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.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”
类型“AbstractControl”Angular 4 上不存在属性“控件”[重复]