В настоящее время я пытаюсь создать универсальный c сервис для централизации httpRequest.
@Injectable()
export class ResourceService<T extends Resource> {
url = environment.apiUrl;
constructor(
protected httpClient: HttpClient,
protected endpoint: string) { }
list(): Observable<T[]> {
return this.httpClient
.get(`${this.url}/${this.endpoint}`)
.pipe();
}
}
Но я столкнулся с проблемой, потому что хочу, чтобы ответ JSON был приведен к объекту данного типа T, чтобы использовать методы объекта, но он никогда не приводится.
export class CalendarService extends ResourceService<CalItem> {
constructor(httpClient: HttpClient) {
super(httpClient, '**');
}
getCalendarItems() {
return super.list().pipe(
map(
(events => {
const calendarEvents: CalendarEvent[] = [];
events.map((event :CalItem ) => {
calendarEvents.push(event.toCalEvent());
});
this._events.next(calendarEvents);
})
)).subscribe();
}
}
export class CalItem extends Resource {
title: string;
location: string;
startdate: Date;
enddate?: Date;
toCalEvent() {
return {
id: this.id,
start: this.startdate,
end: this.enddate,
title: this.title
}
}
Например, если я вызываю мой метод getCalendarItem (), он выдает ошибку
Uncaught TypeError: event.toCalEvent не является функцией
Поскольку 'событие' по-прежнему является JSON, а не объектом CalItem.
Вы уже сталкивались и решить эту проблему или мне нужно навести "вручную" ответ в моем объекте?