我正在使用angular的httpClient,并尝试使用正确的打字稿打字,但是我做错了事。以下代码给我一个错误
this.httpClient
.post(this.loginUrlRoute, params)
.pipe(
retry(3),
catchError(this.handleError.bind(this))
)
.subscribe((response: { url: string}) => {
Office.context.ui.displayDialogAsync(response.url);
});
[ts]
类型'(response:{url:string;})=> void'的参数不是 可分配给类型'(value:Object)=> void'的参数。种类 参数“响应”和“值”不兼容。 类型“对象”不能分配给类型“ {网址:字符串; }'。 “对象”类型可分配给很少的其他类型。您的意思是改用“ any”类型吗? 类型“对象”中缺少属性“ URL”。 [2345]
如果我将其更改为response:object ...,则它抱怨
“类型'object'上不存在属性'url'。”
正确的方法是什么?
答案 0 :(得分:0)
通常,我希望从我的帖子中获得某种类型的object
。我用接口定义该对象,如下所示:
export interface Product {
id: number;
productName: string;
productCode: string;
}
然后我将该接口用作帖子上的通用参数:
createProduct(product: Product): Observable<Product> {
const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
product.id = null;
return this.http.post<Product>(this.productsUrl, product, { headers: headers })
.pipe(
tap(data => console.log('createProduct: ' + JSON.stringify(data))),
catchError(this.handleError)
);
}
请注意,将Observable<Product>
作为返回类型,并将this.http.post<Product>
用作调用。
按照最佳做法,我订阅该组件中的可观察对象:
this.productService.createProduct(p)
.subscribe(
(product: Product) => console.log(product),
(error: any) => this.errorMessage = <any>error
);
话虽如此,这是您要问的吗?还是您正在尝试从响应中获取所创建项目的网址?
如果是这样,那么这也可能会有所帮助:Read response headers from API response - Angular 5 + TypeScript