fix(types): stop collapsing custom intersection types in createResponse/createMocks#337
Merged
eugef merged 1 commit intoJul 16, 2026
Conversation
Owner
|
Hi @MGough, thanks for you contribution and especially for the regression tests. |
Contributor
Author
|
Thanks @eugef - I considered opening an issue but the change was small enough and the docs seemed to encourage a PR as a first step so I hope that's OK. Thanks for keeping the project maintained! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Since 1.18.0, passing a custom response type to
createMocks<T1, T2>()(orcreateResponse<T2>()) no longer works whenT2is an intersection of a framework type (e.g. Next.js'sNextApiResponse) withMockResponse<Response<...>>.The new conditional return types added in #324 / #323 (to type
_getJSONData()) narrowT2down to a bareexpress.Response<ResBody>(orglobalThis.Response), silently discarding the intended intersection withT2.I believe those changes weren't needed in order to support the
_getJSONData()typing.This worked correctly in 1.17.2
Reproduction
Expected
resis typed asMockResponse<ApiResponse>, i.e. it still includes theNextApiResponse(or whatever custom interface) portion ofT2, exactly as it was resolved before 1.18.0.Actual
resis typed asMockResponse<Response | e.Response<any, Record<string, any>>>(a union ofglobalThis.Responseandexpress.Response). Passing it anywhere that expectsNextApiResponsefails with:This PR
This PR adds regression tests to both request and response to ensure that support for these custom intersection types are always maintained, and subsequently rolls back the changes to
createResponseandcreateMocks.