Angular HttpClient return expecting observable rather than observable

前端 未结 4 872
温柔的废话
温柔的废话 2020-12-08 14:54

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 j

相关标签:
4条回答
  • 2020-12-08 15:24

    i solve this casting my header params like this

    return this.http.get<SomeModel>(someUrl, <Object>this.options);
    
    0 讨论(0)
  • 2020-12-08 15:34

    As this is a service 'PortfolioService' we may not need interface here, instead we can use of type any, and also GET method is only necessary here.

    GetPortfolio(portfolioId): Observable<any> {
      return this.http.get(this.apiUrl + '/${portfolioId}')
             .map((response:any) => {
                  return response;
             });
    }
    

    This should work, please try.

    0 讨论(0)
  • 2020-12-08 15:38

    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

    even you can do

    headers: HttpHeaders = new HttpHeaders({
            'Content-Type': 'application/json',
        })
    GetPortfolio(portfolioId: string): Observable<Portfolio> {
            return this.http.get<Portfolio>('...', {
                headers: this.headers
            })
        }
    
    0 讨论(0)
  • 2020-12-08 15:38

    Typecast your httpOptions

    private httpOptions: {
        headers: HttpHeaders
    };
    

    The typescript compiler is pulling the wrong get method type (src)

    /**
    * Construct a GET request which interprets the body as JSON and returns the full event stream.
    *
    * @return an `Observable` of all `HttpEvent`s for the request, with a body type of `T`.
    */
    get<T>(url: string, options: {
        headers?: HttpHeaders | {[header: string]: string | string[]},
        observe: 'events',
        params?: HttpParams|{[param: string]: string | string[]},
        reportProgress?: boolean,
        responseType?: 'json',
        withCredentials?: boolean,
    }): Observable<HttpEvent<T>>;
    

    When you specify the type with headers, it pulls the correct type. (src)

    /**
    * Construct a GET request which interprets the body as JSON and returns it.
    *
    * @return an `Observable` of the body as type `T`.
    */
    get<T>(url: string, options?: {
        headers?: HttpHeaders | {[header: string]: string | string[]},
        observe?: 'body',
        params?: HttpParams|{[param: string]: string | string[]},
        reportProgress?: boolean,
        responseType?: 'json',
        withCredentials?: boolean,
    }): Observable<T>;
    
    0 讨论(0)
提交回复
热议问题