Dalam dunia TypeScript, tipe data adalah fondasi utama yang memastikan kode lebih aman, mudah dipelihara, dan minim bug. Namun, tidak semua situasi dapat dikenali secara otomatis oleh sistem pengetikan TypeScript. Kadang, developer sudah tahu lebih banyak tentang tipe data dibandingkan TypeScript itu sendiri. Di sinilah konsep Type Assertion dan Type Narrowing berperan penting untuk membantu TypeScript memahami konteks yang lebih spesifik.
Type Assertion memungkinkan kita memberi tahu TypeScript tipe data yang sebenarnya dari sebuah nilai, sedangkan Type Narrowing membantu TypeScript mempersempit tipe data berdasarkan kondisi tertentu. Dengan dua konsep ini, kita dapat menulis kode yang lebih fleksibel, tetap aman, dan mudah dibaca — terutama saat bekerja dengan data dinamis seperti API, form, atau input user.
Apa Itu Type Assertion?
Type Assertion adalah cara untuk memberi tahu TypeScript secara eksplisit bahwa kita yakin tentang tipe dari sebuah nilai. Dalam istilah sederhana, ini seperti mengatakan kepada TypeScript: “Percayalah padaku, aku tahu tipe datanya.”
Sintaks Type Assertion menggunakan keyword as:
let value: unknown = "Hello TypeScript"; let strLength = (value as string).length;
Pada contoh di atas, value awalnya bertipe unknown, tetapi kita tahu bahwa isinya adalah string. Dengan as string, TypeScript mengizinkan kita mengakses properti .length yang hanya dimiliki oleh tipe string.
Contoh Penggunaan Type Assertion
1. Mengonversi tipe data DOM
Saat bekerja dengan elemen DOM di browser, TypeScript biasanya mengembalikan tipe HTMLElement yang umum. Jika kita ingin mengakses properti spesifik, kita bisa menggunakan Type Assertion.
const inputElement = document.querySelector("input#username") as HTMLInputElement;
console.log(inputElement.value);
Tanpa as HTMLInputElement, TypeScript akan memberikan error karena HTMLElement belum tentu memiliki properti value.
2. Mengubah tipe union menjadi tipe spesifik
type User = { name: string } | { id: number };
let user: User = { name: "Alice" };
console.log((user as { name: string }).name);
Dengan as, kita bisa menentukan tipe spesifik dari nilai union agar bisa mengakses propertinya dengan aman.
Kesalahan Umum dalam Type Assertion
Walaupun powerful, Type Assertion harus digunakan dengan hati-hati. TypeScript tidak benar-benar mengubah tipe data di runtime, hanya cara compiler memahaminya.
Misalnya:
Contoh Gabungan Type Assertion dan Type Narrowing
Kadang kita perlu menggabungkan keduanya untuk kasus kompleks:
function getElementValue(el: HTMLElement | null) {
if (el) {
const input = el as HTMLInputElement;
console.log("Value:", input.value);
}
}
Dalam contoh ini, kita menggunakan narrowing untuk memastikan el tidak null, lalu memakai assertion agar TypeScript tahu bahwa el adalah HTMLInputElement.
Kesimpulan
Type Assertion dan Type Narrowing adalah dua konsep penting dalam TypeScript yang berfungsi untuk mengontrol dan memastikan tipe data secara lebih akurat.
-
Type Assertion digunakan ketika kita yakin terhadap tipe suatu nilai.
-
Type Narrowing memungkinkan TypeScript secara otomatis mempersempit tipe berdasarkan logika program menggunakan
typeof,instanceof, danin.
Dengan memahami keduanya, Anda dapat menulis kode TypeScript yang lebih aman, efisien, dan mudah dirawat — tanpa kehilangan fleksibilitas dalam menangani data dinamis.