Angular 10:无法覆盖HttpClient

问题描述

我正在尝试在HttpClient上使用继承并覆盖其所有常用方法

但是当我尝试覆盖请求方法时,Typescript指向错误

关于打字稿指出的错误有解释

因为当我覆盖GET / POST / PUT / DELETE / OPTIONS时没有错误

仅这种“请求”方法

enter image description here

解决方法

这只是黑客,但我想不出解决此问题的合适方法

所以只需以这种方式声明'request'方法,我就可以删除该错误:

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

    if (this.authService.config.activateInterception) {
        return this.requestWithRetry(method,url,options);
    }
    else {
        return super.request(method,options);
    }
}
,

这贯穿ng build

@Injectable()
export class FoobarHttpClient extends HttpClient {

    request( method: 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,options );
    }

}

我的项目仍在Angular 9上,并且http.d.ts没有公开内部使用的HttpObserve(也许现在已在Angular 10中导出,我没有检查)。

如果您尚未这样做,建议您查看ng HttpInterceptor。使用拦截器是自定义HttpClient行为的常用方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...