Ayrıştırılmış birleşimlerle kapsamlı hata işleme
switch+never, yardımcı araçlar ve modüller genelinde derleme zamanı kapsam denetimleri kullanarak ayrıştırılmış birleşimler için tüm durumları ele alan işleyiciler yazın.
Ayrıştırılmış birleşimlerle kapsamlı hata işleme, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 2 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 2 dersten oluşur.
Giriş
Amaç: Birleşim türünün her üyesinin ele alınmasını garanti etmek. switch + never kullanacak, küçük bir exhaustiveCheck yardımcı programı görecek ve dosyalar arasında kapsamı nasıl koruyacağınızı öğreneceksiniz.
- Ayrım belirteçleri (tag alanları)
- Tüm durumları kapsayan switch ifadeleri
- Hızlı başarısız olan varsayılanlar
Ayrımlı birleşim türü
Ayrımlı birleşim türünün ortak bir etiketi vardır (burada kind). Her varyant kendi verisini taşır.
export type Payment =
| { kind: "Card"; last4: string }
| { kind: "Cash" }
| { kind: "Wire"; iban: string }Switch + never
default, p değişkenine never türünü atar. Daha sonra yeni bir varyant eklerseniz, onu ele alana kadar derleyici hata verir.
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
}
}
}exhaustiveCheck yardımcısı
Niyeti açıkça belirtmek için küçük bir yardımcı kullanın. never parametresi, ele alınmayan durumları yalnızca çalışma zamanında fırlatılan bir hata değil, bir tür hatası hâline getirir.
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)
}
}Modüller arası kapsam
Birleşim türleri bir dosyada tanımlanıp başka bir dosyada ele alındığında, eklenen bir dal tüm switch ifadeleri güncellenene kadar derlemeleri yine bozar; tam olarak istediğimiz davranış budur.
// 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)
}
}İpuçları ve sakıncalar
İpuçları:
- Dize sabiti etiketlerini tercih edin (ör.
tag/kind). - Varyantları küçük tutun; çok büyük birleşim türleri yerine verileri iç içe nesnelerle birleştirin.
neverkoruması olmadan asladefaultkullanmayın; bu, eksik durumları gizler.
Tüm durumları kapsama denetimi
Hızlı denetim: Tüm durumların ele alınmasını ne zorunlu kılar?
Özet
Özet: Bir ayrım belirteci kullanın, bir switch yazın ve birleşim türleri geliştikçe tam kapsamı garanti etmek için varsayılan dalda never türüne atama yapın (veya exhaustiveCheck çağırın).
Yapay zeka eğitmeniyle TypeScript öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 101
- Dersler
- 352
Sıkça Sorulan Sorular
“Ayrıştırılmış birleşimlerle kapsamlı hata işleme” dersi ücretsiz mi?
Evet — “Ayrıştırılmış birleşimlerle kapsamlı hata işleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 2 dersten oluşur.
“Ayrıştırılmış birleşimlerle kapsamlı hata işleme” dersinde ne öğreneceğim?
switch+never, yardımcı araçlar ve modüller genelinde derleme zamanı kapsam denetimleri kullanarak ayrıştırılmış birleşimler için tüm durumları ele alan işleyiciler yazın. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 2 dersinin 2. dersidir.
“Ayrıştırılmış birleşimlerle kapsamlı hata işleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Result/Either tarzı türler
- Ayrıştırılmış birleşimlerle kapsamlı hata işleme