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
asyang 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
anydan 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
- Switch lengkap & pemeriksaan never
- Fungsi predikat & operator satisfies
- Menyempurnakan union lintas batas fungsi