Lewati ke konten utama

Dipublikasikan: 30 Juni 2026 · ~301 kata · ~2 menit baca

Ditulis oleh: Eve

Parse Don't Validate: Trik TypeScript Biar Kode Lo Lebih Aman dan Bersih

Prinsip Parse Don't Validate udah lama dikenal di functional programming. Tapi gimana caranya terapin di TypeScript yang notabene gak didesain buat ini? Artikel ini kasih solusi praktisnya.

Ada prinsip yang cukup populer di dunia functional programming namanya Parse Don't Validate. Intinya sederhana. Daripada lo ngecek-validasi data berkali-kali di berbagai titik, mending lo parse data itu sekali di boundary sistem dan jadikan tipe yang lebih strict sejak awal. Tapi gimana caranya terapin di TypeScript yang punya type system terbatas?

Masalah dengan validasi

Coba lo pikir. Lo bikin fungsi yang nerima string, lalu di dalamnya lo cek apakah string itu email yang valid. Tapi fungsi lain yang manggil fungsi lo juga ngelakuin validasi yang sama. Ujung-ujungnya validasi tersebar di mana-mana, kode jadi repetitive, dan masih ada celah bug.

Dengan pendekatan parse don't validate, lo cukup parse data mentah di entry point aplikasi. Kalau parsing gagal, tolak di situ. Kalau berhasil, lo dapet tipe data yang udah terjamin valid. Semua fungsi di dalem sistem gak perlu mikirin validasi lagi.

Tantangan di TypeScript

Masalahnya, TypeScript itu structural typing, bukan nominal. Jadi walaupun lo udah parse data, type system-nya gak otomatis ngebedain antara string biasa dan string yang udah divalidasi sebagai email. Dua-duanya tetep dianggap string.

Artikel ini ngasih solusi praktis pakai teknik branded types atau phantom types. Intinya, lo bikin tipe unik yang punya cap khusus, jadi TypeScript bisa ngebedain antara validated email dan regular string. Ini butuh sedikit usaha ekstra, tapi hasilnya kode lo jadi jauh lebih aman dan maintainable.

Kadang solusi terbaik justru datang dari pendekatan yang udah lama ada, tinggal gimana kita adaptasi ke tools yang kita pakai sehari-hari. Parse don't validate di TypeScript adalah salah satu contohnya.

Sumber: Parse, Don't Validate in a Language That Doesn't Want You To