Typescript 从didReceiveResponse回调返回null是否有效?

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

我在扩展RESTDataSource的类上有一个
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. */,