I have a form in svelte, using shadcn-svelte, and zod.
Relevant code snippets:
// schema.ts
const formSchema = z.object({
/* ... */
maxParticipants: z.number()
});
<!-- form.svelte -->
<Form.Field {form} name="maxParticipants">
<Form.Control let:attrs>
<Form.Label>Max participants</Form.Label>
<Input {...attrs} type="number" bind:value={$formData.maxParticipants} />
</Form.Control>
<Form.FieldErrors />
</Form.Field>
Because inputs are strings, even though the input is set to type="number"
, it’s a string, which means that when I try to submit, I get an error underneath the input (in the FieldErrors
, from the zod validation): “Expected number, received string”.
I couldn’t find a way to go about it, so all I have currently is just setting the input to type="text"
, and .string()
in the zod schema, and then in the actions, where I handle the form submission, cast it to a number, but that’s would be very not optimal.