diff --git a/lib/http-mock.d.ts b/lib/http-mock.d.ts index aee66ef..a2c3327 100644 --- a/lib/http-mock.d.ts +++ b/lib/http-mock.d.ts @@ -2,7 +2,7 @@ import { Request, Response, CookieOptions } from 'express'; import { IncomingMessage, OutgoingMessage } from 'http'; export type RequestType = IncomingMessage | globalThis.Request; -export type ResponseType = OutgoingMessage | globalThis.Response; +export type ResponseType = OutgoingMessage | globalThis.Response | Response; export type RequestMethod = 'CONNECT' | 'DELETE' | 'GET' | 'HEAD' | 'OPTIONS' | 'PATCH' | 'POST' | 'PUT' | 'TRACE'; @@ -170,7 +170,7 @@ export type MockResponse = T & { _isEndCalled: () => boolean; _getHeaders: () => HeaderWebAPI; _getData: () => any; - _getJSONData: () => any; + _getJSONData: () => T extends Response ? ResBody : any; _getBuffer: () => Buffer; _getLocals: () => any; _getStatusCode: () => number; @@ -187,7 +187,9 @@ export type MockResponse = T & { export function createRequest(options?: RequestOptions): MockRequest; -export function createResponse(options?: ResponseOptions): MockResponse; +export function createResponse( + options?: ResponseOptions +): MockResponse ? Response : T>; export interface Mocks { req: MockRequest; @@ -197,4 +199,11 @@ export interface Mocks { export function createMocks( reqOptions?: RequestOptions, resOptions?: ResponseOptions -): Mocks; +): Mocks< + T1, + T2 extends globalThis.Response + ? globalThis.Response + : T2 extends Response + ? Response + : Response +>; diff --git a/test/lib/http-mock.test-d.ts b/test/lib/http-mock.test-d.ts index ef38293..0604628 100644 --- a/test/lib/http-mock.test-d.ts +++ b/test/lib/http-mock.test-d.ts @@ -26,6 +26,14 @@ expectNotType>(createResponse()); expectAssignable(createResponse()); expectNotAssignable(createResponse()); +expectType>>(createResponse>()); +expectNotType>(createResponse>()); +expectAssignable(createResponse>()); + expectType>(createMocks()); // eslint-disable-next-line no-undef expectType>(createMocks()); + +expectType>>( + createMocks>() +);