扩展Got包RequestError类时遇构造函数调用问题求助
扩展Got包RequestError类时调用父类构造函数异常问题
我在尝试扩展Got包的RequestError类时遇到问题,调用父类(super)构造函数时出现异常。
我的代码如下:
import { RequestError, NormalizedOptions } from 'got'; class NetworkError extends RequestError { constructor(err: RequestError, request: Request | NormalizedOptions) { super(err.message, err, request); } }
报错详情:
类型“RequestError”的参数不能赋给类型“ErrorOptions | undefined”的参数。类型“RequestError”缺少类型“ErrorOptions”的以下属性:cause, ignoreDuplicates, expose, statusCode(ts2345)
解决方法
问题根源是你传入父类构造函数的第二个参数不符合RequestError的签名要求——RequestError的构造函数不接受另一个RequestError实例作为参数,第二个参数应该是包含请求配置的ErrorOptions对象。
修正后的代码:
import { RequestError, NormalizedOptions, RequestErrorOptions } from 'got'; class NetworkError extends RequestError { constructor(err: RequestError, request: Request | NormalizedOptions) { // 提取原错误的配置信息,合并传入的request参数 const errorOptions: RequestErrorOptions = { ...err.options, request }; super(err.message, errorOptions); // 将原错误设置为当前错误的原因,便于追踪 this.cause = err; } }
如果使用的是旧版本Got(v10及以下),RequestError的构造函数签名为(message: string, request: Request | NormalizedOptions, response?: Response),此时可直接调整参数顺序:
import { RequestError, NormalizedOptions } from 'got'; class NetworkError extends RequestError { constructor(err: RequestError, request: Request | NormalizedOptions) { super(err.message, request, err.response); this.cause = err; } }
内容的提问来源于stack exchange,提问作者Aniket Babhulkar
相关产品推荐
相关产品推荐

