Skip to main content

UseForm working

 Let’s make it super clear with a real example.

You have this:

type ShippingFormInputs = {
email: string;
age: number;
};

and this Zod schema:

const shippingFormSchema = z.object({
email: z.string().email(),
age: z.number().min(18),
});

and this form:

const { register, handleSubmit, formState: { errors } } =
useForm<ShippingFormInputs>({
resolver: zodResolver(shippingFormSchema)
});

🧠 What happens step by step

1. TypeScript (<ShippingFormInputs>) — BEFORE running code

This only works while coding.

Example mistake:

register("emial"); // ❌ typo

👉 TypeScript will immediately show error:

"Property 'emial' does not exist"

✔ This is ONLY for developer safety.


2. Zod (shippingFormSchema) — WHEN user submits form

Now user runs the app and enters:

email: "abc"
age: 10

Then user clicks submit.

👉 Now Zod runs:

z.string().email() ❌ invalid
z.number().min(18) ❌ invalid

So Zod returns:

errors = {
email: "Invalid email",
age: "Must be at least 18"
}

✔ This is REAL runtime validation.


⚡ Key idea (VERY IMPORTANT)

ToolWhen it worksWhat it checks
TypeScript <ShippingFormInputs>Before running codeDeveloper mistakes (typos, wrong fields)
Zod (resolver)When user submits formReal input values

🧪 Simple mental model

TypeScript = Guard for YOU (developer)

"Are you writing correct code?"

Zod = Guard for USER input

"Did user enter valid data?"


🔥 Final flow

User submits form:

1. User clicks submit
2. Zod runs first (validates real data)
3. If OK → form submits
4. If not → errors shown

Meanwhile TypeScript already helped you while writing code.

Comments

Popular posts from this blog

Tailwind css and its corresponding vanilla css

Tailwind Class CSS Property Vanilla CSS Equivalent Description bg-white background-color background-color: #ffffff; Sets background color to white. shadow-sm box-shadow box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); Adds a small shadow under the element. border-b border-bottom-width border-bottom-width: 1px; Adds a bottom border. Default color: #e5e7eb (gray-200). max-w-7xl max-width max-width: 80rem; /* 1280px */ Restricts container width for large screens. mx-auto margin-left , margin-right margin-left: auto; margin-right: auto; Centers the container horizontally. px-4 padding-left , padding-right padding-left: 1rem; padding-right: 1rem; Adds horizontal padding (16px). sm:px-6 Responsive padding (small screens ≥640px) @media (min-width: 640px) { padding-left: 1.5rem; padding-right: 1.5rem; } Increases padding on small screens. lg:px-8 Responsive padding (large screens ≥1024px) @media (min-width: 1024px) { padding-left: 2rem; paddi...

Rest and spread operator in javascript

  Absolutely 👍 — here are several practical and clear examples of the rest operator ( ... ) in JavaScript, covering functions, arrays, and objects 👇 🧮 1. Rest in Function Parameters When you don’t know how many arguments a function will receive: function multiply ( factor, ...numbers ) { return numbers. map ( n => n * factor); } console . log ( multiply ( 2 , 1 , 2 , 3 , 4 )); // Output: [2, 4, 6, 8] 👉 factor gets the first argument ( 2 ), and ...numbers collects the rest into an array [1, 2, 3, 4] . 🧑‍🤝‍🧑 2. Rest with Array Destructuring You can collect remaining array elements into a variable: const fruits = [ "apple" , "banana" , "mango" , "orange" ]; const [first, second, ...others] = fruits; console . log (first); // "apple" console . log (second); // "banana" console . log (others); // ["mango", "orange"] 👉 The rest operator gathers all remaining elements afte...

Role of box-sizing and its attributes in css

  🧱 Default behavior (content-box) By default, browsers use: box-sizing : content-box; This means: Total element width = content width + padding + border So if you have: .container { width : 300px ; padding : 20px ; border : 5px solid black; } Then the total visible width becomes: 300 (content) + 40 ( left + right padding) + 10 ( left + right border) = 350 px ⚠️ The box becomes wider than 300px , which can cause overflow or layout shifts. ✅ With box-sizing: border-box When you use: box-sizing : border-box; the formula changes to: Total element width = width (including padding + border) So the same CSS now behaves like this: width = 300 px (total) → content area = 300 - ( 40 padding + 10 border) = 250 px ✅ The box stays exactly 300px wide — no overflow. 🎯 Why it’s useful Prevents unexpected overflow due to padding/borders Makes responsive layouts easier Keeps your box sizes consistent You can trust width to be the actu...