Typescript 从didReceiveResponse回调返回null是否有效?
我在扩展RESTDataSource的类上有一个Typescript 从didReceiveResponse回调返回null是否有效?,typescript,apollo,apollo-server,apollo-datasource-rest,Typescript,Apollo,Apollo Server,Apollo Datasource Rest,我在扩展RESTDataSource的类上有一个didReceiveResponse回调,如果响应状态为404,我将返回null。由于键入了RESTDataSource.didReceiveResponse,这似乎是无效的 async didReceiveResponse<T>(res: Response, req: Request): Promise<T | null> { if (res.status === 404) { return
didReceiveResponse
回调,如果响应状态为404,我将返回null
。由于键入了RESTDataSource.didReceiveResponse
,这似乎是无效的
async didReceiveResponse<T>(res: Response, req: Request): Promise<T | null> {
if (res.status === 404) {
return null;
}
return super.didReceiveResponse(res, req);
}
有没有一种方法可以在返回null
的同时解决此键入问题,而不禁用编译器或严格的null检查?请查看apollo datasource rest
包的源代码
didReceiveResponse
方法的源代码为:
受保护的异步didReceiveResponse(
答复:答复,,
_请求:请求,
):承诺{
if(response.ok){
返回(this.parseBody(response)作为承诺;
}否则{
抛出等待。errorFromResponse(response);
}
}
它们使用如下类型断言:
将(this.parseBody(response)返回为Promise;
因此,如果您确信null
值正是您想要的,那么您可以做同样的事情
例如
SomeDataSource.ts
:
从“apollo数据源rest”导入{RESTDataSource};
从'apollo server env'导入{响应,请求};
类SomeDataSource扩展了RESTDataSource{
受保护的异步didReceiveResponse(res:Response,req:Request):承诺{
if(res.status==404){
作为承诺返回(如有无效);
}
返回super.DidReceiverResponse(res,req);
}
}
tsconfig.json
:
"strictNullChecks": true /* Enable strict null checks. */,
"strictNullChecks": true /* Enable strict null checks. */,