Learning
Zod

Best practice-ek

Validálj a belépési pontokon, UI-ban safeParse, schema újrafelhasználás, külön schemas réteg, lokalizált hibaüzenetek.

Best practice-ek

1) Validálj a trust boundary-n

export async function POST(req: Request) {
  const body = await req.json()
  const validated = createUserSchema.safeParse(body)
  if (!validated.success) return Response.json({ errors: validated.error.issues }, { status: 400 })
  return Response.json({ ok: true })
}

2) UI-ban safeParse

const result = schema.safeParse(formData)
if (!result.success) {
  setErrors(result.error.flatten().fieldErrors)
  return
}

3) Reuse schema-k (ne duplikálj)

const userSchema = z.object({ id: z.string(), name: z.string(), email: z.string().email() })
const createUserSchema = userSchema.omit({ id: true })
const updateUserSchema = createUserSchema.partial()
const publicUserSchema = userSchema.pick({ id: true, name: true })

4) Külön schemas/ réteg

src/
  schemas/
    user.ts
    product.ts
    auth.ts

5) Típus generálás z.infer-rel

export const userSchema = z.object({ name: z.string() })
export type User = z.infer<typeof userSchema>

6) Értelmes hibaüzenetek

const schema = z.object({
  email: z.string({ required_error: "Az email megadása kötelező" }).email("Érvényes email formátum szükséges"),
})

On this page