当使用httpclient时,您可以给get调用类型并接收该对象的结构体。例如,
http.get<ProductData>("url:ressource:id").subscribe(x=> this.myObj = x)
会导致myObj看起来只是对象的类型。如果我在那个对象上有函数,它们是不可调用的。我从那里知道我应该创建一个新对象,并将请求结果的属性分配给新对象。我的问题是,是否有可能有一个函数接受一个类型作为模板,然后返回该类型的可观察对象与实例?
像这样http.get<ProductData>("url:ressource:id").makeNew<Product>()
这里的makennew的结果将是产品类型的可观察对象,然后如果你订阅它,你会得到一个产品。
我想更简单的方法是。
this.http
.get<IProduct>('https://dummyjson.com/products/1')
.pipe(
map((x) => {
var a = new ProductDisplay();
Object.assign(a, x);
return a;
})
)
.subscribe((x) => {
console.log('obj is ', x);
});
是否可以将.map部分替换为一个函数调用,如makeNew<Product>()
您可以创建自己的操作符,它将为您创建类的实例
export const makeNew = <T>(clazz: new () => T) => map(x => Object.assign(new clazz(), x));
并将其用作管道中的一行
...
get<...>(...).pipe(
makeNew(ProductDisplay)
)