Angular 2+ HttpClient响应类型脚本类型

时间:2018-12-11 16:55:20

标签: javascript angular typescript

我正在使用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'。”

正确的方法是什么?

1 个答案:

答案 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