期望可观察的< HttpEvent< any>的Angular HttpClient返回而不是可观察到的任何 [英] Angular HttpClient return expecting observable<HttpEvent<any> rather than observable<any>

查看:104
本文介绍了期望可观察的< HttpEvent< any>的Angular HttpClient返回而不是可观察到的任何的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用HttpClient时,返回类型出现编译错误.在我的函数GetPortfolio中,我期望GET调用返回类型为Observable<Portfolio>的json对象,但它给出了错误:

I'm getting a compilation error on the return type when using HttpClient. In my function GetPortfolio, I'm expecting the GET call to return the json object of type Observable<Portfolio> but it's giving the error:

类型Observable<HttpEvent<Portfolio>>不可分配给类型Observable<Portfolio>.类型HttpEvent<Portfolio>不能分配给类型Portfolio.类型HttpProgressEvent不可分配给类型Portfolio.类型HttpProgressEvent中缺少属性name.

Type Observable<HttpEvent<Portfolio>> is not assignable to type Observable<Portfolio>. Type HttpEvent<Portfolio> is not assignable to type Portfolio. Type HttpProgressEvent is not assignable to type Portfolio. Property name is missing in type HttpProgressEvent.

我的代码:

import { Injectable } from '@angular/core';
import { environment } from './environments/environment';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';


export interface Portfolio {
  name: string;
  id: string;
}

@Injectable()
export class PortfolioService {

    private httpOptions;

    apiUrl: string;

    constructor(private http: HttpClient) {
      this.apiUrl = environment.apiUrl + "/api/portfolios";

      this.httpOptions = {
        headers: new HttpHeaders(
          {
            'Content-Type': 'application/json',
          })   
      };
    }


    GetPortfolio(portfolioId: string): Observable<Portfolio> {
      return this.http.get<Portfolio>(this.apiUrl + '/${portfolioId}', this.httpOptions);
   }

}

Angular英雄教程和文档中的HttpClient请求应该是Observable<any>: Angular HttpClient文档

From the angular hero tutorial and docs HttpClient requests should expect Observable<any>: Angular HttpClient doc

那么我做错什么了吗?还是应该将返回值设置为Observable<HttpEvent<Portfolio>>?

So am I doing something wrong? Or should I be setting the return value to Observable<HttpEvent<Portfolio>> ?

推荐答案

很奇怪,如果您编写,不要给出错误

It's strange, don't give error if you write

GetPortfolio(portfolioId: string): Observable<Portfolio> {
    return this.http.get<Portfolio>('....', {
        headers: new HttpHeaders(
            {
                'Content-Type': 'application/json',
            })   
    });
}

看起来,编译器希望对象具有适当的标头,参数,观察...,但是由于您的对象没有类型,因此编译器可以接受

It's look like, the compiler expect an object with the properites headers,params,observe..., but as your object have no type, the compiler can accept it

即使你可以做

headers: HttpHeaders = new HttpHeaders({
        'Content-Type': 'application/json',
    })
GetPortfolio(portfolioId: string): Observable<Portfolio> {
        return this.http.get<Portfolio>('...', {
            headers: this.headers
        })
    }

这篇关于期望可观察的&lt; HttpEvent&lt; any&gt;的Angular HttpClient返回而不是可观察到的任何的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆