Masalah dengan Melempar Error
Pahami alasan pengecualian menyembunyikan kegagalan dari sistem jenis.
Masalah dengan Melempar Error adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Pengecualian Tidak Terlihat
Saat sebuah fungsi menjalankan throw, tanda tangannya tidak menyatakan hal itu. Sistem tipe tidak dapat melihat fungsi mana yang mungkin gagal, sehingga pemanggil tidak mendapat dorongan dari kompiler untuk menangani kesalahan.
Fungsi yang Melempar Pengecualian
Fungsi ini terlihat seolah-olah selalu mengembalikan angka, tetapi sebenarnya dapat melempar pengecualian. Tipe pengembalian number sepenuhnya menyembunyikan kasus kegagalan.
function parsePort(s: string): number {
const n = Number(s);
if (Number.isNaN(n)) throw new Error("bad port");
return n;
}
console.log(parsePort("8080")); // 8080Pemanggil Lupa Menangkapnya
Tidak ada yang memaksa pemanggil membungkus pemanggilan tersebut dalam try/catch. Kesalahan ini berhasil dikompilasi tanpa masalah dan baru muncul sebagai kerusakan saat waktu eksekusi.
const port = parsePort("oops");
// No compile error; throws at runtime, possibly crashing the app.try/catch Menghilangkan Tipe
Bahkan saat Anda menangkapnya, nilai yang ditangkap bertipe unknown (atau any). Struktur kesalahan tidak dilacak, sehingga penanganannya hanya berdasarkan tebakan.
try {
parsePort("x");
} catch (e) {
// e: unknown -> you must narrow it manually
}Kesalahan sebagai Nilai
Alternatifnya adalah menjadikan kegagalan sebagai nilai biasa yang dikembalikan fungsi, bukan pengecualian yang dilempar. Dengan begitu, tipe pengembalian secara jujur menunjukkan kedua hasil yang mungkin.
Sketsa Pengembalian Nilai
Alih-alih melempar pengecualian, kembalikan objek berpenanda yang menjelaskan keberhasilan atau kegagalan. Pemanggil harus memeriksanya sebelum menggunakan nilai tersebut.
type ParseResult =
| { ok: true; value: number }
| { ok: false; error: string };Tipe Kini Menyatakan Kebenaran
Fungsi yang mengembalikan ParseResult menyatakan bahwa fungsi tersebut mungkin gagal. Kompiler kemudian mengharuskan pemanggil menangani cabang kegagalan.
function parsePort(s: string): ParseResult {
const n = Number(s);
return Number.isNaN(n)
? { ok: false, error: "bad port" }
: { ok: true, value: n };
}Penanganan yang Dipaksakan
Karena nilainya dapat berupa salah satu dari kedua cabang, Anda tidak dapat membaca value tanpa memeriksa ok terlebih dahulu. Kompiler mempersempit tipe hanya setelah pemeriksaan tersebut.
const r = parsePort("oops");
if (r.ok) console.log(r.value);
else console.log("failed:", r.error);Pengecualian Tetap Memiliki Tempat
Kegagalan yang benar-benar tidak terduga dan tidak dapat dipulihkan (kesalahan pemrogram, kehabisan memori) masih dapat melempar pengecualian. Kesalahan sebagai nilai sangat berguna untuk kegagalan yang diperkirakan, seperti penguraian dan validasi.
Eksplisit Lebih Baik daripada Implisit
Mengembalikan kesalahan membuat jalur kegagalan eksplisit dalam tipe, terlihat di lokasi pemanggilan, dan tidak mungkin terabaikan secara tidak sengaja, berbeda dari throw yang tersembunyi.
Menuju Tipe Hasil dan Opsi
Struktur keberhasilan-atau-kegagalan berpenanda ini dapat digeneralisasi menjadi tipe Hasil yang dapat digunakan kembali, sedangkan ketiadaan-versus-keberadaan dapat digeneralisasi menjadi Opsi. Keduanya akan dibahas berikutnya.
Pemeriksaan Singkat
Pemeriksaan singkat untuk pelajaran ini.
Rekapitulasi
Kesalahan yang dilempar bersifat tidak terlihat bagi tipe: tanda tangan menyembunyikan kegagalan dan pemanggil lupa menangkapnya. Mengembalikan kegagalan sebagai nilai eksplisit (objek keberhasilan-atau-kesalahan berpenanda) membuat jalur kegagalan terlihat dalam tipe dan tidak mungkin terabaikan, sehingga mengarah pada tipe Hasil dan Opsi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Masalah dengan Melempar Error” gratis?
Ya — teks lengkap “Masalah dengan Melempar Error” 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 “Masalah dengan Melempar Error”?
Pahami alasan pengecualian menyembunyikan kegagalan dari sistem jenis. 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 1 dari 4.
Berapa lama pelajaran “Masalah dengan Melempar Error” 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
- Masalah dengan Melempar Error
- Memodelkan Jenis Result
- Jenis Option dan Maybe
- Pemrograman Berorientasi Railway