创建HttpClient对象



当使用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)
)

最新更新