TypeScript'te Tip Güvenliğini Zod ile Çalışma Zamanına Taşımak
TypeScript'in derleme zamanı garantileri çalışma zamanında kaybolur. Zod ile API sınırlarında tip güvenliğini nasıl koruduğumu anlatıyorum.
TypeScript'te Tip Güvenliğini Zod ile Çalışma Zamanına Taşımak
TypeScript, yalnızca derleme zamanında tip kontrolü yapar. Bir API'den gelen JSON verisi, harici bir kullanıcı formu ya da ortam değişkenleri gibi çalışma zamanı verileri için bu güvence geçerli değildir. Zod, bu boşluğu dolduruyor.
Sorun: "as" ile Sahte Güven
const data = (await res.json()) as User;
Bu satır TypeScript'e "bana güven" demekten başka bir şey yapmaz. API beklenmedik bir şekil döndürürse, hata çok daha sonra, tamamen alakasız bir noktada ortaya çıkar.
Zod ile Şema Tanımlamak
const UserSchema = z.object({
id: z.string(),
email: z.string().email(),
role: z.enum(["admin", "user"]),
});
const data = UserSchema.parse(await res.json());
Bu yaklaşım hem çalışma zamanında doğrulama yapar hem de z.infer<typeof UserSchema> ile otomatik olarak TypeScript tipini türetir. Şema ve tip her zaman senkronize kalır.
Form Doğrulamada Kullanımı
react-hook-form ile birlikte Zod resolver kullanmak, form doğrulama mantığını backend şemasıyla aynı kaynaktan türetmeyi mümkün kılıyor. Bu da frontend ve backend doğrulama kurallarının birbirinden sapmasını engelliyor.
Sonuç
Zod, TypeScript'in statik garantilerini sistem sınırlarına (API, form, ortam değişkenleri) taşıyarak, "çalışıyor gibi görünen ama çalışma zamanında patlayan" hataların önüne geçiyor.