TypeScript Academy · Ders

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.

2. ders / 28 adım

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.
  • never koruması olmadan asla default kullanmayı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).

Başlamak ücretsiz

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

  1. Result/Either tarzı türler
  2. Ayrıştırılmış birleşimlerle kapsamlı hata işleme
← TypeScript Academy Sayfasına Dön