fix: type for UseRemixFormReturn (#142)#181
Open
bravo-kernel wants to merge 1 commit into
Open
Conversation
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.
Fixes type issue described in #142.
Description
UseRemixFormReturn<TFieldValues>was defined usingReturnType<typeof useRemixForm>(without passing generic parameters) to capture the overridden signatures ofhandleSubmit,reset, andregister. BecauseuseRemixFormis a generic function, callingReturnType<typeof useRemixForm>without type arguments resolves it with the defaultTFieldValues = FieldValues, causingresetandregisterto be typed against the baseFieldValuesinstead of the caller's concrete schema type.This makes
UseRemixFormReturn<ConcreteSchema>unsatisfiable in practice: the value returned byuseRemixForm<ConcreteSchema>()cannot be assigned to a parameter typed asUseRemixFormReturn<ConcreteSchema>because theresetandregistersignatures disagree on whether the field type isFieldValuesorConcreteSchema.The fix replaces the manual intersection with a TypeScript instantiation expression (available since TS 4.7):
This derives the type directly from
useRemixForm's actual return, with all three generic parameters propagated correctly, while preserving the same intent: the overriddenhandleSubmit,reset, andregistersignatures are still reflected (not the baseUseFormReturnones).Type of change
How Has This Been Tested?
Verified by type-checking a real application against the patched build. The app calls
useRemixForm<FormData>()(whereFormDatais a concrete Zod schema type) and passes the result to a shared helper typed asUseRemixFormReturn<FieldValues>. Before the fix this required a@ts-expect-errorsuppression; after the fix the helper can be made generic (UseRemixFormReturn<T>) and all errors are gone with no suppressions needed.Steps to reproduce the original error:
Checklist: