Angular 10: невозможно переопределить метод запроса HttpClient

Я пытаюсь использовать наследование для HttpClient и переопределить все его общие методы.

но Typescript указывает на ошибку, когда я пытаюсь переопределить метод запроса

есть ли объяснение об ошибке, указывающей Typescript

потому что у него не было ошибки, когда я переопределяю GET/POST/PUT/DELETE/OPTIONS

только этот метод "запроса" только так

введите здесь описание изображения


person aj go    schedule 28.09.2020    source источник
comment
Взгляните на свое объявление атрибута options и сравните его с базовым классом.   -  person Simon    schedule 28.09.2020
comment
Ага. сделал сравнение с базовым классом, и я считаю, что эти параметры на моем снимке экрана являются правильными параметрами. что касается параметра option, я намеренно установил его тип на «любой», чтобы я мог передавать параметры без проблем в lint, поскольку его тип является анонимным объектом   -  person aj go    schedule 28.09.2020


Ответы (2)


Это всего лишь хак, но я не мог придумать, как это решить

поэтому, просто объявив метод запроса таким образом, я мог бы удалить эту ошибку:

request: any = (method: string, url: string, options?: any): Observable<any> => {

    if (this.authService.config.activateInterception) {
        return this.requestWithRetry(method, url, 0, options);
    }
    else {
        return super.request(method, url, options);
    }
}
person aj go    schedule 28.09.2020

Это проходит через ng build

@Injectable()
export class FoobarHttpClient extends HttpClient {

    request( method: string, url: string, options?: {
        body?: any;
        headers?: HttpHeaders | {
            [header: string]: string | string[];
        };
        params?: HttpParams | {
            [param: string]: string | string[];
        };
        observe?: 'body' | 'events' | 'response'; // == HttpObserve;
        reportProgress?: boolean;
        responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
        withCredentials?: boolean;
    } ): Observable<any> {
        return super.request( method, url, options );
    }

}

Мой проект все еще находится на Angular 9, и там http.d.ts не предоставляет внутренне используемый HttpObserve (возможно, теперь он экспортируется в Angular 10, я не проверял).

Если вы еще этого не сделали, я рекомендую заглянуть в файл ng HttpInterceptor. Использование перехватчика — распространенный подход к настройке поведения HttpClient.

person Simon    schedule 28.09.2020
comment
Я сделал что-то вроде этого подхода, но он все еще указывает на то же самое на моем интеллекте. Не могли бы вы предоставить ссылку о том, как я могу добиться того же с помощью Interceptor? - person aj go; 29.09.2020
comment
Из SO: stackoverflow.com/questions/ 48348946/ или stackoverflow.com/questions/54733093/. Из среды, например. medium.com/angular- подробно/ - person Simon; 29.09.2020