我使用简化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
,它就可以工作,但是这样做会失去帮助服务的目的。
答案 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
的参数。