0Pricing
TypeScript Academy · Pelajaran

Penanganan galat menyeluruh dengan union diskriminatif

Tulis handler menyeluruh untuk union diskriminatif menggunakan switch+never, utilitas helper, dan pemeriksaan cakupan saat kompilasi di seluruh modul.

Penanganan galat menyeluruh dengan union diskriminatif adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 2. 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 2 pelajaran total.

Pengantar

Tujuan: Pastikan setiap anggota union ditangani. Anda akan menggunakan switch + never, utilitas exhaustiveCheck kecil, dan melihat cara mempertahankan cakupan di seluruh berkas.

  • Diskriminan (bidang tag)
  • Switch yang lengkap
  • Nilai bawaan yang gagal dengan cepat

Union terdiskriminasi

Union terdiskriminasi memiliki tag bersama (di sini kind). Setiap varian membawa datanya sendiri.

export type Payment =
  | { kind: "Card"; last4: string }
  | { kind: "Cash" }
  | { kind: "Wire"; iban: string }

Switch + never

default menetapkan p ke never. Jika Anda menambahkan varian baru nanti, kompiler akan menghasilkan error sampai varian tersebut ditangani.

export function describe(p: Payment): string {
  switch (p.kind) {
    case "Card": return `Card ••••${p.last4}`
    case "Cash": return "Cash"
    case "Wire": return `Wire ${p.iban}`
    default: {
      const _exhaustive: never = p
      return _exhaustive
    }
  }
}

Pembantu exhaustiveCheck

Gunakan pembantu kecil agar maksudnya jelas. Parameter never menjadikan kasus yang tidak ditangani sebagai kesalahan tipe, bukan sekadar lemparan saat runtime.

export function exhaustiveCheck(x: never): never {
  throw new Error(`Unhandled case: ${JSON.stringify(x)}`)
}

export function pay(p: Payment): string {
  switch (p.kind) {
    case "Card": return "charged card"
    case "Cash": return "took cash"
    case "Wire": return "initiated wire"
    default: return exhaustiveCheck(p)
  }
}

Cakupan lintas modul

Saat union didefinisikan dalam satu berkas dan ditangani di berkas lain, penambahan cabang tetap membuat build gagal sampai semua switch diperbarui—tepat seperti yang kita inginkan.

// errors.ts
export type AppError =
  | { tag: "Auth"; reason: "Unauthorized" | "Forbidden" }
  | { tag: "NotFound"; resource: string }
  | { tag: "Conflict"; resource: string }

// handler.ts
import type { AppError } from "./errors"
import { exhaustiveCheck } from "./exhaustive"

export function toStatus(e: AppError): number {
  switch (e.tag) {
    case "Auth": return e.reason === "Unauthorized" ? 401 : 403
    case "NotFound": return 404
    case "Conflict": return 409
    default: return exhaustiveCheck(e)
  }
}

Kiat & jebakan

Kiat:

  • Utamakan tag literal string (misalnya, tag/kind).
  • Buat varian tetap kecil; susun data melalui objek bertingkat, bukan union yang sangat besar.
  • Jangan pernah menggunakan default tanpa penjaga never; hal itu menyembunyikan kasus yang terlewat.

Pemeriksaan kelengkapan

Pemeriksaan singkat: Apa yang menegakkan penanganan yang lengkap?

Ringkasan

Ringkasan: Gunakan diskriminan, tulis switch, dan pada cabang default tetapkan nilainya ke never (atau panggil exhaustiveCheck) untuk menjamin cakupan penuh seiring perkembangan union.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penanganan galat menyeluruh dengan union diskriminatif” gratis?

Ya — teks lengkap “Penanganan galat menyeluruh dengan union diskriminatif” 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 2 pelajaran total.

Apa yang akan aku pelajari di “Penanganan galat menyeluruh dengan union diskriminatif”?

Tulis handler menyeluruh untuk union diskriminatif menggunakan switch+never, utilitas helper, dan pemeriksaan cakupan saat kompilasi di seluruh modul. 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 2.

Berapa lama pelajaran “Penanganan galat menyeluruh dengan union diskriminatif” 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

  1. Tipe bergaya Result/Either
  2. Penanganan galat menyeluruh dengan union diskriminatif
← Kembali ke TypeScript Academy