Tipe Data: unknown
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu akan mampu:
- Menjelaskan perbedaan
unknowndanany - Menyimpan data yang belum diketahui menggunakan
unknown - Memeriksa tipe data sebelum menggunakan nilainya
- Memahami type narrowing secara sederhana
Pendahuluan
Section titled “Pendahuluan”Kadang kita menerima data dari luar program: input pengguna, file, API, atau data lama. Kita belum tahu data tersebut berupa teks, angka, atau bentuk lain.
Untuk kondisi ini, TypeScript menyediakan unknown.
unknown artinya: “Saya belum tahu tipe nilainya. Jangan gunakan sebelum diperiksa.” Ini lebih aman daripada any.
Analogi: Kotak Misteri
Section titled “Analogi: Kotak Misteri”Bayangkan kamu menerima kotak tertutup tanpa label dari gudang sekolah.
anyberarti kamu langsung mengambil sesuatu dari kotak dan memakainya tanpa melihat isi.unknownberarti kamu membuka kotak, melihat isi, lalu memastikan barangnya cocok sebelum dipakai.
Kotak misteri┌─────────────────┐│ isi: ? │└─────────────────┘ │ ▼ cek duluApakah ini buku? angka? alat? │ ▼Gunakan dengan amanPenjelasan Materi
Section titled “Penjelasan Materi”unknown bisa menerima nilai apa pun, sama seperti any:
let data: unknown = "Putra"data = 17data = trueNamun perbedaannya muncul saat kamu ingin memakai data itu:
let data: unknown = "Putra"
// data.toUpperCase()// Error! Object is of type 'unknown'.TypeScript meminta kamu mengecek dulu apakah data benar-benar string.
Type Narrowing: Mempersempit Kemungkinan Tipe
Section titled “Type Narrowing: Mempersempit Kemungkinan Tipe”Proses mengecek tipe dari unknown sebelum digunakan disebut type narrowing. Artinya kita mempersempit kemungkinan tipe dari “bisa apa saja” menjadi tipe yang sudah jelas.
let data: unknown = "Putra"
if (typeof data === "string") { console.log(data.toUpperCase())}Di dalam blok if, TypeScript tahu bahwa data adalah string. Maka .toUpperCase() boleh digunakan.
Mari Mencoba
Section titled “Mari Mencoba”Buat file src/bab1/unknown.ts:
function tampilkanData(data: unknown): void { if (typeof data === "string") { console.log(`Data teks: ${data.toUpperCase()}`) } else if (typeof data === "number") { console.log(`Data angka dikali 2: ${data * 2}`) } else if (typeof data === "boolean") { console.log(`Data boolean: ${data ? "Benar" : "Salah"}`) } else { console.log("Tipe data belum didukung") }}
tampilkanData("Putra")tampilkanData(17)tampilkanData(true)tampilkanData(null)Jalankan:
tsx src/bab1/unknown.tsOutput:
Data teks: PUTRAData angka dikali 2: 34Data boolean: BenarTipe data belum didukungPenjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”function tampilkanData(data: unknown): void {function— membuat blok kode yang bisa dipanggil berulangtampilkanData— nama fungsidata: unknown— input bernamadataboleh menerima nilai apa pun: void— fungsi ini tidak mengembalikan nilai, hanya menampilkan output
if (typeof data === "string") {typeof data— meminta TypeScript/JavaScript mengecek tipe data=== "string"— memastikan tipe yang diterima adalah string- Jika kondisi benar,
dataaman diperlakukan sebagai string di dalam blok ini
unknown vs any
Section titled “unknown vs any”| Hal | any |
unknown |
|---|---|---|
| Menerima nilai apa saja | Ya | Ya |
| Bisa langsung dipakai | Ya | Tidak, harus dicek dulu |
| Perlindungan TypeScript | Tidak ada | Ada |
| Aman untuk data luar | Tidak | Lebih aman |
| Pilihan default untuk data tidak diketahui | Tidak | Ya |
Contoh Data Input Pengguna
Section titled “Contoh Data Input Pengguna”function prosesNilai(input: unknown): void { if (typeof input === "number") { console.log(`Nilai valid: ${input}`) } else { console.log("Nilai harus berupa angka") }}
prosesNilai(90) // Nilai valid: 90prosesNilai("sembilan puluh") // Nilai harus berupa angkaunknown membuat program lebih tahan terhadap data yang salah.
Kesalahan Umum
Section titled “Kesalahan Umum”❌ Memakai unknown tanpa pemeriksaan
Section titled “❌ Memakai unknown tanpa pemeriksaan”let nama: unknown = "Putra"// console.log(nama.length)// Error! Object is of type 'unknown'.Perbaikan:
if (typeof nama === "string") { console.log(nama.length)}❌ Menganggap unknown sama dengan any
Section titled “❌ Menganggap unknown sama dengan any”Keduanya menerima semua nilai, tetapi unknown memaksa kita mengecek terlebih dahulu. Ini fitur keamanan, bukan gangguan.
Latihan
Section titled “Latihan”Buat file src/bab1/latihan-unknown.ts:
- Buat fungsi
cekDatadengan satu parameter bertipeunknown - Jika data adalah string, tampilkan panjang teksnya
- Jika data adalah number, tampilkan hasil angka ditambah 10
- Jika data adalah boolean, tampilkan
"Status aktif"atau"Status tidak aktif" - Panggil fungsi tersebut dengan minimal tiga tipe data berbeda
Ringkasan
Section titled “Ringkasan”unknownmenerima nilai tipe apa pun- Tidak seperti
any,unknowntidak bisa dipakai sebelum dicek - Gunakan
typeofuntuk mempersempit tipe data - Proses ini disebut type narrowing
unknownlebih aman untuk data dari luar program