Jenis never dan Status yang Mustahil
Modelkan kode yang tidak terjangkau dan nilai yang mustahil dengan never.
Jenis never dan Status yang Mustahil adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.
Tipe never
never adalah tipe kosong — tipe ini merepresentasikan nilai yang tidak mungkin ada. Tidak ada nilai yang dapat ditetapkan ke never (kecuali never itu sendiri). Tipe ini menandai situasi yang seharusnya mustahil.
// You cannot create a value of type never
function crash(): never {
throw new Error('boom');
}
try { crash(); } catch (e) { console.log('caught'); }Fungsi yang Tidak Pernah Mengembalikan Nilai
Fungsi yang selalu menjalankan throw tidak pernah mengembalikan nilai secara normal, sehingga tipe kembalianya adalah never. Ini memberi tahu pemanggil dan kompilator bahwa eksekusi berhenti di sini.
function fail(message: string): never {
throw new Error(message);
}
try { fail('invalid'); } catch (e) { console.log('handled'); }Perulangan Tak Terbatas Mengembalikan never
Fungsi dengan perulangan tak terbatas juga tidak pernah mengembalikan nilai, sehingga tipenya adalah never. Kompilator mengenali bahwa alur kontrol tidak dapat berlanjut setelah fungsi tersebut.
function listen(): never {
while (true) {
// forever
break; // (break added so the demo terminates)
}
throw new Error('stopped');
}
console.log('listen has return type never');never dibandingkan void
Jangan samakan never dengan void. Fungsi void tetap mengembalikan nilai, hanya saja tidak menghasilkan nilai yang berguna. Fungsi never sama sekali tidak mengembalikan nilai — fungsi tersebut melempar kesalahan atau berulang selamanya.
function logIt(): void {
console.log('done'); // returns normally
}
function abort(): never {
throw new Error('stop'); // never returns
}
logIt();
try { abort(); } catch (e) { console.log('ok'); }never dalam Pemeriksaan Menyeluruh
Penggunaan never yang paling praktis adalah pemeriksaan kelengkapan. Dalam default switch, tetapkan variabel ke never. Jika semua kasus telah ditangani, variabel tersebut sudah bertipe never dan kode dapat dikompilasi.
type Shape = 'circle' | 'square';
function area(s: Shape): string {
switch (s) {
case 'circle': return 'pi r^2';
case 'square': return 'a^2';
default:
const _check: never = s; // ok: all handled
return _check;
}
}
console.log(area('square'));Menemukan Kasus yang Terlewat
Jika seseorang menambahkan anggota gabungan baru tetapi melupakan suatu kasus, nilai yang tersisa bukan lagi never, sehingga penetapan tersebut gagal dikompilasi. Pemeriksaan never mengubah celah yang sebelumnya diam-diam menjadi kesalahan yang terlihat jelas.
type Shape = 'circle' | 'square' | 'triangle';
// If 'triangle' case is missing, assigning s to never
// would error: 'triangle' is not assignable to never.
console.log('Add a case for every member');never dalam Cabang Gabungan yang Mustahil
Ketika penyempitan menghapus semua kemungkinan, tipe yang tersisa adalah never. Kompilator mengetahui bahwa cabang tersebut tidak dapat dijangkau, yang dapat mengungkap kesalahan logika.
function check(x: string | number): void {
if (typeof x === 'string') {
console.log('string');
} else if (typeof x === 'number') {
console.log('number');
} else {
// x is never here
console.log('unreachable');
}
}
check('hi');never sebagai Tipe Terbawah
never adalah tipe terbawah: tipe ini dapat ditetapkan ke semua tipe lain, karena nilai yang tidak mungkin ada secara otomatis kompatibel dengan apa pun. Inilah sebabnya throw dapat muncul di posisi ekspresi apa pun.
function getOrThrow(v: string | null): string {
return v ?? fail();
}
function fail(): never {
throw new Error('missing');
}
console.log(getOrThrow('value'));Menyaring Gabungan Menjadi never
Dalam tipe kondisional dan tipe terpetakan, never berarti 'hapus ini'. Menggabungkan tipe dengan never tidak mengubah apa pun: T | never sama saja dengan T. Karena itu, never merupakan pilihan alami untuk penyaringan.
type Keep<T> = T extends string ? T : never;
type R = Keep<'a' | 1 | 'b'>; // 'a' | 'b'
const x: R = 'a';
console.log(x);Memodelkan state yang Mustahil
Gunakan never dalam bentuk objek agar kombinasi ilegal tidak dapat direpresentasikan. Di sini, state 'memuat' tidak dapat sekaligus membawa data karena tipe tersebut melarangnya.
type State =
| { status: 'loading'; data?: never }
| { status: 'ready'; data: number };
const s: State = { status: 'ready', data: 7 };
console.log(s);never Meningkatkan Keamanan Pemfaktoran Ulang
Karena pemeriksaan menyeluruh dengan never gagal ketika suatu kasus terlewat, pemeriksaan ini membuat pemfaktoran ulang lebih aman: perluas gabungan, dan kompilator akan menunjukkan setiap tempat yang perlu diperbarui.
type Cmd = 'start' | 'stop';
function run(c: Cmd): string {
if (c === 'start') return 'starting';
if (c === 'stop') return 'stopping';
const _x: never = c;
return _x;
}
console.log(run('start'));Pemeriksaan Singkat
Uji pemahaman Anda tentang tipe never.
Rangkuman: Tipe Mustahil
Anda telah mempelajari bahwa never:
- Merupakan tipe kosong—tidak ada nilai yang dapat bertipe demikian.
- Merupakan tipe pengembalian fungsi yang melempar kesalahan atau berulang tanpa akhir.
- Mengaktifkan pemeriksaan kelengkapan kasus pada cabang bawaan percabangan.
- Muncul dalam cabang penyempitan yang mustahil dan menyaring gabungan dalam logika tipe.
Selanjutnya, kita akan membahas void dan perbedaannya.
function assertNever(x: never): never {
throw new Error('Unexpected: ' + String(x));
}
console.log('assertNever guards exhaustiveness');Belajar TypeScript dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 101
- Pelajaran
- 352
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Jenis never dan Status yang Mustahil” gratis?
Ya — teks lengkap “Jenis never dan Status yang Mustahil” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Jenis never dan Status yang Mustahil”?
Modelkan kode yang tidak terjangkau dan nilai yang mustahil dengan never. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai TypeScript Academy?
Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Jenis never dan Status yang Mustahil” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?
Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Memahami unknown vs any
- Jenis never dan Status yang Mustahil
- Jenis void dalam Fungsi
- Penanganan unknown yang Aman Secara Jenis