В Typescript, типизация является структурной перед всем, поэтому Typescript не будет иметь проблем вообще, если вы скажете ему, что объект javascript имеет заданный тип.
Когда вы пишете:
this.http.get<Product>(`${this.baseURL}/${id}`);
Typescript понимает: «поверьте мне, объект json, возвращаемый через http, действительно является экземпляром класса Product
».
Но на самом деле это не так: это просто объект jsсозданный из json и у него нет метода timeCreatedDisplay
.
Если вы хотите, чтобы это было так, вам нужно явно создать экземпляр Product
, например, так:
export class Product {
constructor(private timeCreated: number) {}
get timeCreatedDisplay () {
// ...
}
}
, а затем:
getProduct(id: number): Observable<Product> {
return this.http.get<any>(`${this.baseURL}/${id}`).pipe(map(j => new Product(j.timeCreated)));
}
Затем вы можете улучшить и ввести интерфейс для определения структуры продукта JSON, использовать его в http.get
и реализовать свой классэто если ты так хочешь.И так далее.