How to correctly type errorMap?
In my project, I have the following type definitions:
export type ValidationSchemaType = typeof validationSchema;
export type FormFields = keyof z.infer<ValidationSchemaType>;
export type ReceiptFormType = ReturnType<
typeof useForm<
z.infer<ValidationSchemaType>,
any,
any,
any,
any,
any,
any,
any,
any,
any
>
>;
And the following component:
<receiptForm.Subscribe
selector={(state) => [
state.canSubmit,
state.isSubmitting,
state.isTouched,
state.fieldMeta,
state.errorMap,
]}
children={([canSubmit, isSubmitting, isTouched, fieldMeta, errorMap]) => {
// ...
}}
/>
In this component, receiptForm is typed as ReceiptFormType.
How can I make errorMap inside the children render prop be correctly typed, so that the types of its fields like onSubmit, onChange, etc. are recognized properly?4 Replies
deep-jade•5mo ago
you probably need to tell typescript that it‘s a tuple and not an array. Add
as const to the end of the selector
but in your context, you typed it as any either way. Could you explain why you extracted the type for receiptForm?fascinating-indigoOP•5mo ago
Because the component with <receiptForm.Subscribe /> is a separate component with a submit button, and I’m passing the form instance to it as a prop.
deep-jade•5mo ago
that sounds like a use case for Form Composition instead
fascinating-indigoOP•5mo ago
Thank you so much — as const solved my problem.
It looks like I’ll need to rewrite the entire composition for my form.