TypeScript - Never: Memahami Tipe Bawah
Hai, para pemula pemrograman! Hari ini, kita akan mendalamkan salah satu tipe yang lebih mistis di TypeScript: tipe never
. Jangan khawatir jika Anda baru saja memulai pemrograman – saya akan mengarahkan Anda melalui konsep ini langkah demi langkah, seperti yang saya lakukan untuk ribuan siswa dalam tahunajaran pengajaran saya. Jadi, ambil minuman favorit Anda, dan mari kita berangkat ke perjalanan yang menarik ke dunia TypeScript!
Apa itu tipe never?
Tipe never
di TypeScript sering disebut sebagai "tipe bawah" atau "tipe kosong". Ini mewakili tipe yang seharusnya tidak pernah terjadi. Sekarang, Anda mungkin berpikir, " Mengapa kita memerlukan tipe yang tidak pernah terjadi?" Well, teman yang curiga, itu lebih berguna daripada yang Anda pikirkan!
Kapan never digunakan?
- Untuk mewakili skenario yang mustahil
- Untuk menghandle pemeriksaan eksklusif
- Dalam fungsi yang tidak pernah mengembalikan nilai
Marilah 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 biasa. Oleh karena itu, tipe pengembalian nya 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 menutupi semua kemungkinan bentuk. Jika kita menambahkan bentuk baru ke dalam Shape
tapi lupa menambahkan kasus untuknya 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 pengembalian nya adalah never
. Itu seperti mengatakan kepada teman Anda Anda akan berhenti berbicara "never" – mereka tahu mereka dalam perbincangan yang panjang!
Perbandingan tipe never dan void
Sekarang, Anda mungkin berpikir, "Bagaimana perbedaan never
dan void
?" Pertanyaan yang bagus! Mari kitauraikan itu.
void
Tipe void
digunakan saat sebuah fungsi tidak mengembalikan nilai apa pun, tetapi itu benar-benar menyelesaikan eksekusinya.
function logMessage(message: string): void {
console.log(message);
}
logMessage("Hai, TypeScript!"); // Fungsi ini mengembalikan undefined
never
Sementara itu, tipe never
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
Marilah 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 tangkap kasus yang mungkin kita lewatkan. Itu seperti memiliki jaring keselamatan saat Anda belajar mengayun jenis!
Contoh 5: Deteksi Kode Yang 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 mengemudi ke tempat yang tidak ada!
Metode dan Properti never
Sekarang, Anda mungkin berpikir, "Apakah never
memiliki metode atau properti apa pun?" Kebenarannya, never
tidak memiliki metode atau properti miliknya 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 |
Memanggil 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 itu dia, teman-teman saya! Kita telah berpergian melalui negeri never
, mengungkapi sudut-sudut dan lubang-lubangnya. Ingat, never
adalah seperti teman yang selalu membatalkan rencana – mereka tidak pernah muncul, tetapi mereka tetap penting untuk dipertimbangkan!
Memahami never
mungkin tampak sulit pada awalnya, tapi dengan latihan, Anda akan menemukan bahwa itu adalah alat yang tak ternilai dalam peralatan TypeScript Anda. Itu membantu membuat kode Anda lebih kuat, menangkap kesalahan potensial, dan membuat Anda berpikir lebih mendalam tentang perilaku fungsi Anda.
Terus coding, terus belajar, dan jangan pernah katakan "never" untuk mencoba hal baru di TypeScript! Sampaijumpa lagi, semoga kesalahan kompilasi Anda sedikit dan inferensi jenis Anda kuat!
Credits: Image by storyset