TypeScript - Never: Menjelajah Tipe Dasar
Hai, para pemrogram yang sedang mencari ilmu! Hari ini, kita akan mempelajari salah satu tipe yang agak misterius di TypeScript: tipe never
. Jangan khawatir jika Anda baru saja memulai berprogram – saya akan memandu Anda melalui konsep ini secara langkah demi langkah, sama seperti yang saya lakukan bagi ribuan murid dalam tahunajaran pengajaran saya. Jadi, ambil minuman favorit Anda, dan mari kita mulai perjalanan yang menarik ke dunia TypeScript!
Apa itu tipe never?
Tipe never
di TypeScript sering disebut sebagai "tipe dasar" atau "tipe kosong". Ini mewakili sebuah tipe yang seharusnya tidak pernah terjadi. Sekarang, Anda mungkin berpikir, " Mengapa kita butuh tipe yang tidak pernah terjadi?" Well, teman yang curiga, itu jauh lebih berguna daripada yang Anda pikirkan!
Kapan tipe never digunakan?
- Untuk mewakili skenario yang mustahil
- Untuk menangani pemeriksaan yang eksklusif
- Dalam fungsi yang tidak pernah mengembalikan nilai
mari kita lihat beberapa contoh untuk membuat konsep ini lebih jelas.
Contoh 1: Mewakili Skenario yang Mustahil
function throwError(message: string): never {
throw new Error(message);
}
let result = throwError("Oops! Ada kesalahan!");
console.log(result); // Baris ini tidak akan pernah dicapai
Dalam contoh ini, fungsi throwError
menjamin untuk melempar kesalahan dan tidak pernah mengembalikan nilai secara normal. Oleh karena itu, tipe kembalinya adalah never
.
Pikirkan seperti ini: jika Anda sedang memasak kue dan resepnya mengatakan "baking sampai never," Anda tahu bahwa kue itu tidak akan keluar dari oven!
Contoh 2: Pemeriksaan Eksklusif
type Shape = "circle" | "square" | "triangle";
function getArea(shape: Shape): number {
switch (shape) {
case "circle":
return Math.PI * Math.pow(5, 2);
case "square":
return 10 * 10;
case "triangle":
return (10 * 5) / 2;
default:
const _exhaustiveCheck: never = shape;
return _exhaustiveCheck;
}
}
Di sini, never
membantu kita memastikan kita telah mencakup semua kemungkinan bentuk. Jika kita menambahkan bentuk baru ke tipe Shape
tapi lupa menambahkan kasus untuk itu di getArea
, TypeScript akan memberikan kesalahan kepada kita. Itu seperti memiliki asisten yang membantu Anda ingat saat Anda lupa sesuatu!
Contoh 3: Fungsi Yang Tidak Pernah Mengembalikan Nilai
function infiniteLoop(): never {
while (true) {
console.log("Loop ini tidak pernah berakhir!");
}
}
Fungsi ini akan berjalan selamanya (atau sampai komputer Anda kehabisan memori). Karena itu tidak pernah selesai dieksekusi, tipe kembalinya adalah never
. Itu seperti mengatakan kepada teman Anda Anda akan berhenti berbicara "never" – mereka tahu mereka dalam perjalanan yang panjang!
Perbandingan tipe never dan void
Sekarang Anda mungkin berpikir, "Bagaimana perbedaan antara never
dan void
?" Pertanyaan bagus! Mari kitauraikan itu.
void
Tipe void
digunakan saat sebuah fungsi tidak mengembalikan nilai apa pun, tapi itu masih menyelesaikan eksekusinya.
function logMessage(message: string): void {
console.log(message);
}
logMessage("Hai, TypeScript!"); // Fungsi ini mengembalikan undefined
never
Tipe never
, dari sisi lain, digunakan saat sebuah fungsi tidak pernah menyelesaikan eksekusinya atau selalu melempar kesalahan.
function failwithError(message: string): never {
throw new Error(message);
}
failwithError("Fungsi ini tidak pernah mengembalikan nilai!");
Pikirkan seperti ini: void
adalah seperti pergi ke toko dan kembali tanpa apa-apa, sedangkan never
adalah seperti memulai perjalanan tanpa tujuan – Anda tidak pernah kembali!
Penggunaan Praktis never
Mari kita lihat beberapa contoh lain dimana never
bisa berguna.
Contoh 4: Type Guards
type Square = { kind: "square", size: number };
type Circle = { kind: "circle", radius: number };
type Shape = Square | Circle;
function assertNever(x: never): never {
throw new Error("Objek tak terduga: " + x);
}
function getArea(shape: Shape) {
switch (shape.kind) {
case "square": return shape.size * shape.size;
case "circle": return Math.PI * shape.radius ** 2;
default: return assertNever(shape); // Kesalahan jika shape bukan Square atau Circle
}
}
Dalam contoh ini, assertNever
membantu kita menangkap kasus yang mungkin kita lewatkan. Itu seperti memiliki jaring keselamatan saat Anda belajar mengayun jenis!
Contoh 5: Deteksi Kode Tak Dapat Dijangkau
function neverReaches(): never {
while (true) {
// Operasi tertentu
}
console.log("Baris ini tidak akan pernah dicapai"); // Kesalahan TypeScript
}
TypeScript cukup cerdas untuk mengetahui bahwa pernyataan console.log
tidak akan pernah dicapai, dan akan memberikan Anda kesalahan. Itu seperti memiliki GPS yang memberitahu Anda saat Anda mencoba mengendarai ke tempat yang tidak ada!
Metode dan Properti never
Sekarang Anda mungkin berpikir, "Apakah never
memiliki metode atau properti?" Kebenarannya, never
tidak memiliki metode atau properti sendiri karena itu mewakili tipe yang seharusnya tidak pernah terjadi. Namun, itu masih menjadi bagian penting dari sistem tipe TypeScript.
Berikut adalah tabel yang menggabungkan apa yang Anda (atau tidak) bisa lakukan dengan never
:
Operasi | Hasil | Penjelasan |
---|---|---|
Assign ke never
|
✅ Diperbolehkan | Setiap tipe dapat diassign ke never
|
Assign never ke jenis lain |
❌ Tidak Diperbolehkan |
never tidak dapat diassign ke jenis lain |
Pemanggilan metode pada never
|
❌ Tidak Diperbolehkan | Karena never seharusnya tidak pernah terjadi, Anda tidak dapat memanggil metode pada itu |
Menggunakan never dalam gabungan |
✅ Diperbolehkan tetapi tanpa efek |
never diabaikan dalam jenis gabungan |
Menggunakan never dalam interseksi |
✅ Diperbolehkan dan menghasilkan never
|
Setiap jenis yang diinterseksi dengan never menghasilkan never
|
Kesimpulan
Dan begitulah, murid-murid tercinta! Kita telah melakukan perjalanan melalui negeri never
, menjelajahi setiap sudut dan lubangnya. Ingat, never
adalah seperti teman yang selalu membatalkan rencana – mereka tidak pernah datang, tetapi mereka tetap penting untuk dipikirkan!
Memahami never
mungkin tampak sulit pada awalnya, tapi dengan latihan, Anda akan menemukan itu adalah alat yang tak ternilai dalam peralatan TypeScript Anda. Itu membantu membuat kode Anda lebih kuat, menangkap kesalahan potensial, dan bahkan membuat Anda berpikir lebih mendalam tentang perilaku fungsi Anda.
Terus coding, terus belajar, dan jangan katakan "never" untuk mencoba hal baru di TypeScript! Sampaijumpa lagi, semoga kesalahan kompilasi Anda sedikit dan inferensi jenis Anda kuat!
Credits: Image by storyset