0Pricing
TypeScript Academy · Pelajaran

Menyempurnakan union lintas batas fungsi

Pertahankan penyempitan yang aman lintas batas fungsi menggunakan union terdiskriminasi, pengembalian predikat, dan tipe bergaya Result.

Menyempurnakan union lintas batas fungsi adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. 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 3 pelajaran total.

Pendahuluan

Tujuan: Pertahankan penyempitan Anda di seluruh pemanggilan fungsi menggunakan gabungan bertanda, pengembalian predikat, dan pembantu validasi.

  • Nol as yang tidak aman di lokasi pemanggilan
  • Penyempitan ikut bersama data

Pengembalian gabungan bertanda

Pola Result: pemanggil mempersempit tipe dengan memeriksa ok. Tanpa konversi tipe, alur kontrolnya jelas.

type Ok<T> = { ok: true; value: T }
type Err = { ok: false; error: string }

type Result<T> = Ok<T> | Err

function parseIntSafe(s: string): Result<number> {
  const n = Number(s)
  return Number.isFinite(n) ? { ok: true, value: n } : { ok: false, error: "NaN" }
}

function useIt(s: string) {
  const r = parseIntSafe(s)
  if (r.ok) {
    // r is Ok<number>
    return r.value * 2
  }
  // r is Err
  return `bad: ${r.error}`
}

Pengembalian predikat

Predikat yang mengembalikan (x is T) memusatkan pemeriksaan dan mempertahankan penyempitan di lokasi pemanggilan.

type User = { id: number; name: string }

type MaybeUser = User | null

function hasUser(x: MaybeUser): x is User {
  return x !== null
}

function greet(x: MaybeUser) {
  if (hasUser(x)) {
    // x narrowed to User
    return `Hello ${x.name}`
  }
  return "Anonymous"
}

Meneruskan penyempitan

Persempit dengan penjaga (misalnya, isCircle), lalu teruskan nilainya; fungsi berikutnya akan melihat tipe yang lebih sempit.

type Shape =
  | { kind: "circle"; radius: number }
  | { kind: "square"; size: number }

function isCircle(s: Shape): s is Extract<Shape, { kind: "circle" }> {
  return s.kind === "circle"
}

function area(s: Shape) {
  if (isCircle(s)) {
    // s is circle here
    return Math.PI * s.radius * s.radius
  }
  return s.size * s.size
}

Validasi di batas

Validasi di batas dan kembalikan Valid/Invalid; pemanggil mempersempit berdasarkan tanda tersebut dan memperoleh data yang sepenuhnya bertipe.

type Payload = { email: string; retries?: number }

type Valid = { ok: true; data: Required<Payload> }
type Invalid = { ok: false; issues: string[] }

type Validation = Valid | Invalid

function validate(p: unknown): Validation {
  const issues: string[] = []
  if (typeof p !== "object" || p === null) return { ok: false, issues: ["not an object"] }
  const x = p as any
  if (typeof x.email !== "string") issues.push("email:string")
  if (x.retries !== undefined && typeof x.retries !== "number") issues.push("retries:number")
  if (issues.length) return { ok: false, issues }
  return { ok: true, data: { email: x.email, retries: x.retries ?? 0 } }
}

function handle(p: unknown) {
  const v = validate(p)
  if (!v.ok) return `bad: ${v.issues.join(",")}`
  // v.data is fully typed here
  return `send to ${v.data.email} (${v.data.retries})`
}

Kiat

Praktik terbaik:

  • Utamakan tanda kecil yang stabil (ok, kind)
  • Satukan pemeriksaan dalam pembantu predikat
  • Gunakan switch menyeluruh di lokasi pemanggilan
  • Hindari any dan konversi tipe yang tidak aman

Penyempitan lintas batas

Pemeriksaan singkat: Pola mana yang paling baik mempertahankan penyempitan di seluruh batas fungsi?

Ringkasan

Ringkasan: Bawa penyempitan sebagai data (Result), validasi di batas, dan hindari konversi tipe yang tidak aman; pemanggil mempersempit tipe melalui pemeriksaan tanda yang sederhana.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menyempurnakan union lintas batas fungsi” gratis?

Ya — teks lengkap “Menyempurnakan union lintas batas fungsi” 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 3 pelajaran total.

Apa yang akan aku pelajari di “Menyempurnakan union lintas batas fungsi”?

Pertahankan penyempitan yang aman lintas batas fungsi menggunakan union terdiskriminasi, pengembalian predikat, dan tipe bergaya 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 3 dari 3.

Berapa lama pelajaran “Menyempurnakan union lintas batas fungsi” 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. Switch lengkap & pemeriksaan never
  2. Fungsi predikat & operator satisfies
  3. Menyempurnakan union lintas batas fungsi
← Kembali ke TypeScript Academy