5 poin oleh asheswook 2025-12-24 | 2 komentar | Bagikan ke WhatsApp

Halo.

Secara umum, saat mengembangkan backend TypeScript, Anda mungkin tahu bahwa titik yang paling sering menimbulkan error adalah bagian runtime yang tidak tertangkap pada waktu kompilasi.

Misalnya, hal ini paling sering terjadi pada implementasi repository yang mem-parsing row DB atau bagian komunikasi dengan API eksternal.

Nilai yang diterima dari DB bisa berbeda dari yang diharapkan sehingga nilai undefined tersisip pada runtime, atau saat melakukan casting, nilai primitif dari luar tidak dipahami dengan benar sehingga menimbulkan human error.

Bahkan saat mengimplementasikan repository, kita harus menuliskan tipe untuk nilai primitif yang datang dari luar dengan interface secara bertumpuk. Mungkin ini masalah kecil, tetapi saya membuatnya agar bisa digunakan dengan lebih nyaman.

Dalam praktiknya, kode untuk bagian API eksternal dan implementasi DB menjadi jauh lebih ringkas, dan error yang terjadi pada runtime juga berkurang.

Setelah mencobanya untuk backend di tim dan hasilnya cukup baik, saya merilisnya ke npm.

import { validate } from 'valdex';  
  
const data: unknown = await fetchData();  
  
validate(data, {  
  name: String,  
  age: Number,  
  active: Boolean  
});  
  
// TypeScript now knows the exact type of data  
data.name // string  
data.age // number  
data.active // boolean  

Contoh di atas mengasumsikan situasi ketika data diambil dari luar. Ini bisa diterapkan baik saat menggunakan axios, mysql2, maupun postgres pg. Validasi dilakukan terhadap nilai yang masuk sebagai tipe unknown, dan jika valid maka pada alur kontrol setelahnya nilai tersebut akan di-assert sebagai nilai yang didefinisikan di validate().

Tentu saja Anda juga bisa menggunakan library seperti zod.

Perbedaan antara zod dan valdex adalah, valdex tidak membuat dan menggunakan schema sebagai instance, melainkan memungkinkan Anda menangani tipe data secara deklaratif langsung di tempat data diterima. Anda tidak perlu bolak-balik mengubah kode ke atas dan ke bawah hanya untuk memodifikasi interface atau kelas DTO.

npm i valdex  

Anda bisa menginstalnya dari npm dan langsung mencobanya.

Github: https://github.com/asheswook/valdex

2 komentar

 
sunrabbit 2025-12-24

Sepertinya ini akan memberikan DX yang sangat bagus, setidaknya untuk tipe yang sederhana. Mantap.

 
asheswook 2025-12-24

Karena mendukung nested object maupun array, sejauh ini belum ada bagian yang terasa mengganggu saat mengimplementasikan API eksternal atau repositori.
Terima kasih atas perhatiannya!