Annotation vs Type Inference
Kapan menulis tipe secara manual dan kapan membiarkan TypeScript menebaknya sendiri.
Dua Cara Memberi Tipe
Annotation artinya menulis tipe secara eksplisit:
let harga: number = 50000;Inference artinya TypeScript menebak tipe dari nilai awal:
let harga = 50000; // otomatis bertipe number
harga = "mahal"; // Error: Type 'string' is not assignable to type 'number'.Inference bukan berarti "tanpa tipe". Variabelnya tetap bertipe number, hanya saja kamu tidak perlu menuliskannya.
Kapan Annotation Wajib
Ada situasi di mana inference tidak bisa menebak, dan kamu harus eksplisit:
1. Parameter fungsi. TypeScript tidak menebak tipe parameter (kecuali konteksnya jelas):
function sapa(nama) { // Error implisit: 'nama' implicitly has an 'any' type
return `Halo ${nama}`;
}
function sapa(nama: string) { // benar
return `Halo ${nama}`;
}2. Variabel yang diisi belakangan:
let pemenang: string; // tanpa annotation jadi any
// ... logika panjang ...
pemenang = "Tim A";3. Return type untuk dokumentasi. Inference bisa menebak return type, tapi menulisnya eksplisit membuat kontrak fungsi jelas dan menangkap error saat isi fungsi berubah tanpa sengaja.
Catatan teknis: Jebakan klasik inference adalah
let daftar = []. TypeScript menyimpulkan tipenya sebagaiany[](atau error di strict mode), lalu semua isi array lolos tanpa cek. Selalu beri annotation:let daftar: string[] = [];.