Angular HttpClient выбирает неправильную перегрузку

У меня проблема, очень похожая на: Почему Angular не выбрана правильная перегрузка для HttpClient.get(...)?

и это:

Возврат Angular HttpClient ожидает наблюдаемое‹HttpEvent‹любое›, а не наблюдаемое‹любое›

но ни одно из этих решений не работает.

Мой код выглядит так:

 getTopology(): Observable<Topology> {
    var me = this;
    let headers = new HttpHeaders({
        'Content-Type': 'application/json'
    });
    let params = new HttpParams();
    let options = {headers: headers, params: params};
    let url = this.url;
    return this.http.getTyped<Topology>(url, options);
}


 getTyped<T>(
     url: string,
     options: {
         headers: HttpHeaders;
         observe?: 'body';
         params?: HttpParams;
         reportProgress?: boolean;
         responseType?: 'json';
         withCredentials?: boolean;
     },
     signRequest = true
 ): Observable<T> {
     options.headers = options.headers.append(
         'Authorization',
         `Bearer ${localStorage.getItem('token')}`
     );
     return this.http.get<T>(url, options);
 }

Это указывает на это:

 get(url: string, options?: {
    headers?: HttpHeaders | {
        [header: string]: string | string[];
    };
    observe?: 'body';
    params?: HttpParams | {
        [param: string]: string | string[];
    };
    reportProgress?: boolean;
    responseType?: 'json';
    withCredentials?: boolean;
}): Observable<Object>;

Вместо этого получите:

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>;

Какие-либо предложения? Также я использую Angular 6.0.6.


person iamcootis    schedule 10.07.2018    source источник


Ответы (1)


Это происходит, когда вы хотите обернуть HttpClient методы, потому что вы передаете параметры динамически, он не может определить тип параметров. Если вы измените строку

return this.http.get<T>(url, options);

к этому

return this.http.get<T>(url, {
     headers: yourHeaders;
     params: params;
 });

это сработает. У меня была такая же проблема, когда я намеревался обернуть методы HttpClient, но потом отказался из-за этого.

person Hikmat G.    schedule 10.07.2018
comment
Потратьте несколько часов, чтобы найти решение, которое работает, но возможно ли, почему это происходит? А что, если мне нужно динамически присвоить значение «параметрам»? - person Junlong Wang; 17.04.2020
comment
Честно говоря, я не могу смоделировать проблему сейчас). Скопируйте вставленный метод getTyped в мой проект, и он указывает на правильную перегрузку. На самом деле мой ответ не имеет смысла, потому что параметры имеют правильный тип, определенный как аргумент родительской функции. - person Hikmat G.; 18.04.2020