对于所有来到这里并确实使用日期类型变量的人,这是我找到的解决方案。它也适用于 TypeScript。
我遇到了这个错误,因为我尝试使用以下方法比较两个日期
var res = dat1.getTime() > dat2.getTime(); // or any other comparison operator
但是我确定我使用了 Date 对象,因为我使用带有 typescript 的 angularjs,并且我从一个类型化的 API 调用中获取了数据。
我不确定为什么会引发错误,但我假设因为我的 Object 是由 JSON 反序列化创建的,所以可能该getTime()
方法根本没有添加到原型中。
解决方案
在这种情况下,根据您的日期重新创建日期对象将解决问题。
var res = new Date(dat1).getTime() > new Date(dat2).getTime()
编辑:
我是对的。类型将被转换为相应的类型,但它们不会被实例化。因此会有一个字符串转换为日期,这显然会导致运行时异常。
诀窍是,如果您使用带有非原始数据(例如日期或函数)的接口,则需要在您的 http 请求之后执行映射。
class Details {
description: string;
date: Date;
score: number;
approved: boolean;
constructor(data: any) {
Object.assign(this, data);
}
}
并执行映射:
public getDetails(id: number): Promise<Details> {
return this.http
.get<Details>(`${this.baseUrl}/api/details/${id}`)
.map(response => new Details(response.json()))
.toPromise();
}
对于数组使用:
public getDetails(): Promise<Details[]> {
return this.http
.get<Details>(`${this.baseUrl}/api/details`)
.map(response => {
const array = JSON.parse(response.json()) as any[];
const details = array.map(data => new Details(data));
return details;
})
.toPromise();
}
有关此主题的学分和更多信息,请点击链接。