【发布时间】:2018-03-16 10:53:52
【问题描述】:
我有一个 angular5 服务,它执行 HTTP 获取并返回如下所示的特定类型
public getProductByIDproductId: string): Observable<Product> {
const headers = new HttpHeaders({ "Content-Type": "application/json" });
const url = `${environment.productservice_baseurl}/${productId}`;
return this.http
.get<Product>(url, { headers: headers })
.pipe(
tap(data => (this._product = data)),
catchError(this.handleError)
);
}
Product 类是具有属性和方法的类。下面是一小段摘录。
class Product{
productID:string;
productName:string;
setQuantity(quantity:number){
}
}
当我在 get 返回的 this._product 上调用 setQuantity 函数时,我收到“setQuantity 不是函数”错误。当我尝试检查 this._product 的实例时,它不是 Product 类型,而是 Object 类型。
get 方法上设置的泛型类型是否仅用于帮助编译时类型检查?如何从 getProductByIDproductId 方法获取产品类的具体实例?
【问题讨论】:
-
你可以使用反序列化器,比如kaiu-lab.github.io/serializer它处理继承和其他事情
-
谢谢。是的,我需要使用序列化库。我也在看github.com/weichx/cerialize
-
Yes Cerialize 完成这项工作,除非您需要在模型中继承
-
请您帮忙了解更多。 cerialize 不支持继承类型吗?
-
使用 cerialize,您必须明确预期的类型。它无法处理对象是 Animal 的情况,并且基于属性它知道它是 Cat 还是 Dog。你必须明确要求狗或猫,所以...
标签: angular typescript angular5 rxjs5