CodeBlanks Logo Icon CodeBlanks

Özet - Discriminated unions

Discriminated union'larla bir olay işleyici yazarsın.

Özet - Discriminated unions

Discriminated union'lar, bir veri akışındaki farklı olayları tek bir tür altında modellemek için idealdir. Her olay kendi discriminant değeriyle ayrılır; switch ifadesi güvenli dallanma sağlar. Yeni olay eklendiğinde, tüm case'leri güncellemek zorunlu olduğu için derleyici eksiklikleri yakalar.

type Action =
  | { type: "add"; item: string }
  | { type: "remove"; id: number }
  | { type: "clear" };

function apply(a: Action): string {
  switch (a.type) {
    case "add": return `added ${a.item}`;
    case "remove": return `removed ${a.id}`;
    case "clear": return "cleared";
  }
}

Uygulama Olay işleyici yaz

Action discriminated union türünü tanımla: "add" (item: string), "remove" (id: number), "clear" üyeleri, type discriminant alanıyla. apply(a: Action): string fonksiyonunu switch (a.type) ile yaz. add için `added ${a.item}`, remove için `removed ${a.id}`, clear için "cleared" döndür. console.log(apply({ type: "add", item: "apple" })), console.log(apply({ type: "remove", id: 7 })), console.log(apply({ type: "clear" })) ile sonuçları yazdır.

Başlangıç kodu

index.ts
// Action discriminated union türünü tanımla (type discriminant, add, remove, clear üyeleri)

// apply fonksiyonunu discriminant kontrolüyle switch ile yaz

// add, remove ve clear olaylarının sonuçlarını yazdır

Örnek çözüm

index.ts
type Action =
  | { type: "add"; item: string }
  | { type: "remove"; id: number }
  | { type: "clear" };

function apply(a: Action): string {
  switch (a.type) {
    case "add":
      return `added ${a.item}`;
    case "remove":
      return `removed ${a.id}`;
    case "clear":
      return "cleared";
  }
}

console.log(apply({ type: "add", item: "apple" }));
console.log(apply({ type: "remove", id: 7 }));
console.log(apply({ type: "clear" }));

Beklenen çıktı

added apple
removed 7
cleared

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Discriminated union'a yeni bir üye eklendiğinde ne olur?

  • Çalışma zamanı hatası alınır
  • Switch case'leri eksikse derleyici uyarır Doğru cevap
  • Union bir diziye dönüşür
  • Mevcut case'ler otomatik güncellenir

Açıklama: Yeni üye eklendiğinde, switch case'leri artık tüm üyeleri kapsamaz; TypeScript eksik case'i derleme zamanında uyarır ve güvenlik sağlar.

2 clear olayını işle

Soru
type Action =
  | { type: "add"; item: string }
  | { type: "remove"; id: number }
  | { type: "clear" };

function apply(a: Action): string {
  switch (a.type) {
    case "add": return `added ${a.item}`;
    case "remove": return `removed ${a.id}`;
    case ____: return "cleared";
  }
}
Cevap
type Action =
  | { type: "add"; item: string }
  | { type: "remove"; id: number }
  | { type: "clear" };

function apply(a: Action): string {
  switch (a.type) {
    case "add": return `added ${a.item}`;
    case "remove": return `removed ${a.id}`;
    case "clear": return "cleared";
  }
}

Açıklama: case "clear", Action union'ının clear üyesine daraltır; bu üye ekstra alan içermediği için yalnızca sabit dize döndürülür.

3 Discriminated unions özet eşleştirmesi

Kavram Anlamı
Discriminated union etiketli üye birleşimi
Discriminant alan her üyede farklı literal değer
switch ifadesi üye bazında dallanma
Yeni üye ekleme eksik case'i derleyici yakalar

İleri seviye bölümündeki tüm dersler