Memodelkan Jenis Result
Representasikan keberhasilan dan kegagalan sebagai data dengan Result.
Memodelkan Jenis Result 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 Hasil
Hasil memodelkan operasi yang berhasil dengan sebuah nilai atau gagal dengan sebuah kesalahan, sebagai gabungan terdiskriminasi yang dapat Anda kembalikan sebagai pengganti melempar pengecualian.
Mendefinisikan Hasil
Struktur klasiknya menggunakan pembeda ok. Saat ok bernilai true, terdapat value; saat false, terdapat error.
type Result<T, E> =
| { ok: true; value: T }
| { ok: false; error: E };Pembantu Konstruktor
Pembantu kecil ok dan err membuat pembuatan hasil menjadi ringkas dan mudah dibaca, alih-alih menulis literal objek secara manual setiap kali.
const ok = <T>(value: T): Result<T, never> => ({ ok: true, value });
const err = <E>(error: E): Result<never, E> => ({ ok: false, error });Mengembalikan Hasil
Fungsi yang dapat gagal mengembalikan ok(value) atau err(error). Tipe pengembaliannya menyatakan kedua kemungkinan tersebut kepada setiap pemanggil.
function divide(a: number, b: number): Result<number, string> {
return b === 0 ? err("divide by zero") : ok(a / b);
}Mempersempit pada ok
Memeriksa result.ok mempersempit gabungan tersebut. Di dalam cabang true, TypeScript mengetahui bahwa value ada; di dalam cabang false, TypeScript mengetahui bahwa error ada.
const r = divide(10, 2);
if (r.ok) console.log(r.value); // 5
else console.log(r.error);Pembeda Mengarahkan Keamanan
Kolom ok adalah pembeda yang memungkinkan kompiler memilih cabang yang tepat. Anda tidak dapat mengakses value tanpa membuktikan terlebih dahulu bahwa ok bernilai true.
const r = divide(1, 0);
// r.value here is a type error until we check r.ok
if (!r.ok) console.log("err:", r.error);Kesalahan Bertipe
Kesalahan dapat lebih kaya daripada sekadar string. Dengan menggunakan gabungan kesalahan bertipe, pemanggil dapat menangani setiap jenis secara tepat setelah mempersempit tipe.
type DivErr = { kind: "zero" } | { kind: "overflow" };
function div(a: number, b: number): Result<number, DivErr> {
if (b === 0) return err({ kind: "zero" });
return ok(a / b);
}Penanganan Kesalahan Menyeluruh
Karena tipe kesalahan berupa gabungan, switch pada pembeda tersebut dapat diperiksa kelengkapannya, sehingga setiap mode kegagalan dipastikan tertangani.
const r = div(1, 0);
if (!r.ok) {
switch (r.error.kind) {
case "zero": console.log("no zero"); break;
case "overflow": console.log("too big"); break;
}
}Pembantu Nilai Bawaan
Terkadang Anda hanya menginginkan nilai atau nilai pengganti. unwrapOr yang sederhana mudah dibaca dan menjaga penanganan kegagalan tetap berada di tempatnya.
function unwrapOr<T, E>(r: Result<T, E>, fallback: T): T {
return r.ok ? r.value : fallback;
}
console.log(unwrapOr(divide(1, 0), -1)); // -1Hasil vs Melempar Pengecualian
Result memindahkan kegagalan ke dalam tipe pengembalian, sehingga pemanggil harus menanganinya. Imbalannya adalah kode yang lebih eksplisit, yang biasanya sepadan untuk kesalahan yang diperkirakan.
Contoh Lengkap
Menggabungkan semuanya: definisikan pembantu, kembalikan hasil, lalu sempitkan tipe sebelum digunakan. Kompiler menjamin bahwa cabang kesalahan diperhatikan.
function safeParse(s: string): Result<number, string> {
const n = Number(s);
return Number.isNaN(n) ? err("NaN") : ok(n);
}
const p = safeParse("42");
console.log(p.ok ? p.value : p.error); // 42Pemeriksaan Singkat
Pemeriksaan singkat untuk pelajaran ini.
Rekapitulasi
Result<T, E> adalah gabungan terdiskriminasi { ok: true; value } atau { ok: false; error }. Buat dengan pembantu ok/err, lalu sempitkan berdasarkan ok agar dapat mengakses value atau error dengan aman. Kesalahan bertipe memungkinkan penanganan yang menyeluruh.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Memodelkan Jenis Result” gratis?
Ya — teks lengkap “Memodelkan Jenis Result” 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 “Memodelkan Jenis Result”?
Representasikan keberhasilan dan kegagalan sebagai data dengan Result. 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 “Memodelkan Jenis Result” 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