Dukungan schema
Matriks inferensi Zod dan batasan renderer Erlangform 1.0.0.
Nilai form
[
{
"name": "name",
"type": "string"
},
{
"name": "active",
"type": "boolean"
},
{
"name": "email",
"type": "email"
}
]Root harus z.object(). Tabel ini menjelaskan inferensi pada child; validasi Zod tetap dipasang terpisah pada TanStack Form.
| Schema child | Metadata/render |
|---|---|
| z.string() | string; input teks |
| z.email(), z.url() | email/url; input khusus |
| z.number() | number; kosong menjadi undefined |
| z.boolean() | boolean; checkbox |
| z.enum string | string dengan options; select |
| z.enum angka | number; bukan select otomatis |
| Literal string | string dengan satu pilihan |
| Literal number/boolean | number/boolean |
| z.iso.date(), z.iso.time() | date/time; string |
| z.iso.datetime() | datetime; string UTC |
| z.date() | date-object; Date lokal |
| z.file() | file; File pertama |
| z.object() | object; child rekursif |
| z.array() | array; tambah/hapus/duplikat/pindah |
| z.tuple() | tuple; posisi tetap |
| z.record() | record; key yang sudah ada pada nilai |
| z.discriminatedUnion() | union; cabang berdasarkan discriminator |
| z.union() dengan metadata jenis sama | Renderer jenis pertama; opsi string digabung |
| z.union() campuran | unknown; tidak ada input bawaan |
| Intersection dua object | Child kedua object digabung tanpa deduplikasi |
| Intersection jenis sama | Metadata sisi kiri |
| Intersection campuran | unknown |
Wrapper dan pipeline
optional, nullable, default, catch, readonly, nonoptional, dan prefault dibuka untuk membaca jenis field. lazy di-resolve dan pipe dibaca dari sisi input. Ini hanya inferensi: tidak otomatis mengisi defaultValues, mengunci readonly, menghapus null, atau menerapkan hasil transform ke state.
Constructor format Zod 4 seperti z.email() dikenali secara khusus. Check format yang ditempel pada string lama tidak selalu mengubah metadata dari string menjadi jenis input khusus.
Tidak ada renderer bawaan
Jenis yang tidak terdaftar, seperti map/set/bigint/symbol/unknown/any, masuk fallback unknown dan tidak menampilkan input tanpa custom registry unknown. Literal banyak nilai dan union kompleks perlu diperiksa dengan infer karena tidak semua bentuk mempunyai kontrol yang sesuai.
Recursive lazy yang merujuk kembali ke dirinya sendiri tidak memiliki penjagaan kedalaman/siklus; hindari schema rekursif tak terbatas. Tuple rest tidak membuat posisi dinamis. Discriminator disarankan berupa string literal tunggal per cabang.
Aturan Zod min/max tidak otomatis berubah menjadi atribut HTML atau batas jumlah item array. Isi opsi fieldConfig dan array secara eksplisit, serta pertahankan validator schema untuk menjamin data valid.
Contoh penggunaan
Gunakan form dari useForm. Lihat persiapan awal.
const schema = z.object({
name: z.string(),
active: z.boolean(),
});
const fields = infer(schema);