2017-12-11 3 views
1

나는 httpClient 호출을 단순화하는 도우미 서비스를 사용합니다. 나는 강하게 Observable을 반환하고 싶습니다.각도 4-5 HttpClient http의 강력한 입력 받기

내 서비스 API를 사용하고 방출하는 강력한 형식의 관찰 가능을 얻으려고 시도합니다.

유형이 전달되어야 내 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. 
 
    } 
 
}
:

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을 입력하면 작동합니다. r 서비스를 제공하지만, 이는 헬퍼 서비스를받는 목적에 어긋납니다.

+0

무엇이 오류입니까? –

+0

무엇이 오류입니까? – Niladri

+0

'this.api.get' 메소드를 게시 할 수 있습니까? – Niladri

답변

3

유형이 제공되지 않을 때 HttpClient.get은 표준 Object을 사용하므로 ApiService.get 기능에 type variable을 제공해야합니다. 그렇게하기 위해서는, 당신은 (예를 들어 T을)과 같이 ApiService.get 같은 유형의 변수를 사용하여 업데이트 할 수 있습니다 : 참고는 함수 선언 (get<T>)의 한 부분으로 <T>를 모두 지정

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

과 매개 변수로서 HttpClient.get으로 전달되었습니다.

+0

답변 해 주시면 답변 해 드리겠습니다. –

+0

당신은 내 하루를 보냈습니다! 'Observable > API가 get 메소드를 필요로하는 메소드는 >으로 바꿀 방법이 있습니까? 지금은'public getUser (id : string) : Observable >처럼 보입니다. { this.api.get (this.url +'users/$ { id}'); } ' –