Tipe Data: any
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu akan mampu:
- Menjelaskan arti tipe
any - Memahami risiko penggunaan
any - Mengenali situasi terbatas saat
anymungkin digunakan - Memilih tipe yang lebih aman jika tersedia
Pendahuluan
Section titled “Pendahuluan”Salah satu kekuatan TypeScript adalah kemampuannya mengecek tipe data. Tetapi ada satu tipe yang bisa “mematikan” pemeriksaan itu: any.
any berarti: “nilai ini boleh berupa apa saja, dan TypeScript jangan bertanya terlalu banyak.” Kedengarannya nyaman, tetapi kebebasan ini bisa membuat bug tersembunyi.
Penjelasan Materi
Section titled “Penjelasan Materi”Variabel bertipe any dapat menyimpan nilai apa pun dan dapat berubah ke tipe apa pun tanpa error:
let data: any = "Putra"data = 17data = truedata = nullTypeScript tidak akan protes. Ia berhenti melindungi variabel tersebut.
Analogi: Tas Tanpa Label
Section titled “Analogi: Tas Tanpa Label”Tipe yang jelas seperti string atau number adalah kotak dengan label:
┌───────────────┐│ HANYA ANGKA │ → number└───────────────┘any seperti tas tanpa label. Kamu bisa memasukkan buku, makanan, sepatu, cairan, bahkan barang yang tidak seharusnya dicampur.
┌───────────────┐│ ISI APA SAJA│ → any└───────────────┘Tas itu memang fleksibel, tetapi saat mencari barang atau menemukan barang rusak, kamu akan kesulitan. Begitu juga program dengan terlalu banyak any.
Mari Mencoba
Section titled “Mari Mencoba”Buat file src/bab1/any.ts:
let dataBebas: any = "Putra"console.log("Awal:", dataBebas, "| tipe:", typeof dataBebas)
dataBebas = 17console.log("Berubah:", dataBebas, "| tipe:", typeof dataBebas)
dataBebas = trueconsole.log("Berubah lagi:", dataBebas, "| tipe:", typeof dataBebas)
dataBebas = ["RPL", "DKV", "TKJ"]console.log("Berubah lagi:", dataBebas, "| tipe:", typeof dataBebas)
// TypeScript membiarkan operasi berisiko ini:let nama: any = "Putra"console.log(nama.toUpperCase())
nama = 17// console.log(nama.toUpperCase())// Jika baris ini dibuka, program error saat dijalankan.Jalankan:
tsx src/bab1/any.tsPenjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”let dataBebas: any = "Putra": anyberarti TypeScript menerima nilai tipe apa pun- Nilai awalnya string, tetapi variabel ini tidak akan terkunci menjadi string
dataBebas = 17Baris ini aman menurut TypeScript, meski tipe berubah dari string menjadi number.
let nama: any = "Putra"console.log(nama.toUpperCase()).toUpperCase() cocok untuk string. Karena nama bertipe any, TypeScript tidak bisa memastikan bahwa nilai ini memang string.
Mengapa any Berbahaya?
Section titled “Mengapa any Berbahaya?”Bandingkan dua kode berikut:
let namaAman: string = "Putra"// namaAman = 17// Error langsung terlihat di VS Codelet namaTidakAman: any = "Putra"namaTidakAman = 17console.log(namaTidakAman.toUpperCase())// Error baru muncul ketika program dijalankanDengan any, TypeScript tidak dapat mencegah kesalahan di contoh kedua. Jadi manfaat utama TypeScript hilang.
Kapan any Boleh Dipakai?
Section titled “Kapan any Boleh Dipakai?”Sebisa mungkin, jangan gunakan any. Namun ada beberapa keadaan sementara:
- Data dari library lama belum memiliki tipe yang jelas
- Kamu sedang memindahkan project JavaScript besar ke TypeScript sedikit demi sedikit
- Kamu benar-benar belum tahu bentuk data, dan perlu membuat perbaikan sementara
Setelah bentuk data sudah jelas, ganti any dengan tipe yang tepat atau unknown.
Kesalahan Umum
Section titled “Kesalahan Umum”❌ Memakai any untuk menghindari error tipe
Section titled “❌ Memakai any untuk menghindari error tipe”let nilai: any = 90nilai = "sembilan puluh"Kode ini mungkin berjalan, tetapi data nilai menjadi tidak konsisten.
Perbaikan: pilih tipe yang benar:
let nilai: number = 90❌ Mengira any selalu aman
Section titled “❌ Mengira any selalu aman”any hanya membuat TypeScript diam. Ia tidak membuat program bebas bug.
Latihan
Section titled “Latihan”Buat file src/bab1/latihan-any.ts:
- Buat variabel
dataPercobaanbertipeanydengan nilai namamu - Ubah menjadi umurmu
- Ubah menjadi status boolean
- Tampilkan nilai dan
typeofsetiap kali berubah - Tambahkan komentar: mengapa tipe ini berisiko jika dipakai untuk data nilai siswa?
Ringkasan
Section titled “Ringkasan”anymenerima nilai tipe apa pun- TypeScript tidak melakukan pemeriksaan tipe pada
any anybisa menyembunyikan bug sampai program dijalankan- Gunakan tipe spesifik saat memungkinkan
- Jika data belum diketahui,
unknownbiasanya lebih aman daripadaany