Для всех тех, кто пришел сюда и действительно использовал переменные с типом даты, вот решение, которое я нашел. Это также относится к TypeScript.
Я столкнулся с этой ошибкой, потому что я пытался сравнить две даты, используя следующий метод
var res = dat1.getTime() > dat2.getTime(); // or any other comparison operator
Однако я уверен, что я использовал объект Date, потому что я использую angularjs с машинописью, и я получил данные от типизированного вызова API.
Я не уверен, почему возникает ошибка, но я предполагаю, что, поскольку мой Объект был создан десериализацией JSON, возможно, метод getTime()
просто не был добавлен в прототип.
Решение
В этом случае воссоздание объекта Date на основе ваших дат решит проблему.
var res = new Date(dat1).getTime() > new Date(dat2).getTime()
Edit:
Я был прав насчет этого. Типы будут приведены к соответствующему типу, но они не будут созданы. Следовательно, к дате будет приведена строка, которая, очевидно, приведет к исключению времени выполнения.
Хитрость в том, что если вы используете интерфейсы с не примитивными данными, такими как даты или функции, вам потребуется выполнить сопоставление после запроса 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();
}
Для кредитов и дополнительной информации по этой теме перейдите по ссылке.