Angular 4-5 HttpClient强类型http获取

时间:2017-12-11 13:39:15

标签: angular typescript

我使用简化httpClient调用的帮助程序服务。我想强烈键入返回的Observable。

我使用api服务的服务,并尝试获取一个发出>的强类型observable。

export class ApiUser(){
  constructor(private api: Api){}

  getUsers(url? : string): Observable<Array<User>>{
    return this.api.get<Array<User>>('users'); //here I get errors on types.
  }
}

我的api帮助服务,应该传递类型:

    import { HttpClient, HttpParams } from '@angular/common/http';
    import { Injectable } from '@angular/core';
    import {Observable} from "rxjs/Observable";
    import {User} from "../../interfaces/interfaces";

    /**
     * Api is a generic REST Api handler.
     */
    @Injectable()
    export class ApiService {
      constructor(public http: HttpClient) {}

      get(endpoint: string, params?: any, reqOpts?: any){
       
        return this.http.get('https://sub.domain.com/api/v1/' + 
     endpoint,reqOpts);
      }
    }

所以问题在于,这可能不是强类型的正确方法,如果我在api帮助程序服务中键入this.http.get,它就可以工作,但是这样做会失去帮助服务的目的。

1 个答案:

答案 0 :(得分:3)

您需要向ApiService.get函数提供type variable,因为HttpClient.get在未提供类型时会采用标准Object。为此,您可以更新ApiService.get以使用此类型变量(例如T),如下所示:

get<T>(endpoint: string, params?: any, reqOpts?: any) {
    return this.http.get<T>('https://sub.domain.com/api/v1/' + 
         endpoint,reqOpts);
}

请注意,您指定<T>作为函数声明(get<T>)的一部分,并作为传递给HttpClient.get的参数。