我使用一个帮助器服务来简化httpClient调用。我想强烈地键入返回的可观察的内容。
在我的服务中,我使用了api服务,并试图获得一个强类型的、可观察的、发射>的服务。
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,它就能工作,但这违背了拥有助手服务的目的。
发布于 2017-12-11 14:01:33
您需要向您的https://www.typescriptlang.org/docs/handbook/generics.html函数提供一个ApiService.get,因为当没有提供一个类型时,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的参数。
https://stackoverflow.com/questions/47754232
复制相似问题