0Pricing
TypeScript Academy · Ders

never ile Eksiksizlik Denetimi

İşlenmemiş durumları derleme zamanında never ile yakalayın.

never ile Eksiksizlik Denetimi, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 3. 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 4 dersten oluşur.

Tüm Durumları Ele Alma Sorunu

Yeni bir birleşim üyesi eklediğinizde, onu bir yerde ele almayı unutmanız kolaydır. Tüm durumları ele alma denetimi, bu gözden kaçırmayı bir derleme hatasına dönüştürür.

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

// If we add "triangle" later, we want every switch to complain.

Asla Türü

never türü, hiçbir zaman oluşamayacak değerleri temsil eder. Her durum ele alınmışsa varsayılan dala ulaşan değer never türündedir.

function fail(): never {
  throw new Error("unreachable");
}
// never is assignable to nothing except never itself.

Varsayılan Durumda never Türüne Atama

default dalında değeri bir never değişkenine atayın. Tüm çeşitler ele alınmışsa atama derlenir; ele alınmamışsa hata verir.

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

function area(s: Shape): number {
  switch (s.kind) {
    case "circle": return Math.PI * s.radius ** 2;
    case "square": return s.side ** 2;
    default:
      const _exhaustive: never = s;
      return _exhaustive;
  }
}
console.log(area({ kind: "square", side: 3 }));

Bir Durumu Unuttuğunuzda Ne Olur?

Bir triangle üyesi ekler ancak onun durumunu unutursanız, varsayılan daldaki s artık never türünde olmaz ve atama derleme zamanında başarısız olur.

// type Shape = ... | { kind: "triangle"; base: number; height: number };
// Now in default, s is { kind: "triangle"; ... }
// const _exhaustive: never = s; // Error: triangle not assignable to never

assertNever Yardımcısı

Yeniden kullanılabilir bir assertNever işlevi bu deseni merkezileştirir. never kabul eder ve hata fırlatarak bu dala ulaşılamaması gerektiğini belgelendirir.

function assertNever(value: never): never {
  throw new Error("Unhandled case: " + JSON.stringify(value));
}
console.log(typeof assertNever);

Switch İçinde assertNever Kullanma

Varsayılan durumda assertNever(s) çağrısını yapın. Bu, derleme zamanında tüm durumların ele alınmasını zorunlu kılar ve çalışma zamanında bu dala ulaşılırsa açık bir hata verir.

function assertNever(value: never): never {
  throw new Error("Unhandled: " + JSON.stringify(value));
}
type Shape =
  | { kind: "circle"; radius: number }
  | { kind: "square"; side: number };

function area(s: Shape): number {
  switch (s.kind) {
    case "circle": return Math.PI * s.radius ** 2;
    case "square": return s.side ** 2;
    default: return assertNever(s);
  }
}
console.log(area({ kind: "circle", radius: 1 }).toFixed(2));

Derleme Zamanı ve Çalışma Zamanı Güvenliği

never denetimi eksik durumları kodu çalıştırmadan önce yakalar; fırlatılan hata ise tür denetiminden çalışma zamanına bir şey sızarsa sizi korur.

function assertNever(x: never): never {
  throw new Error("Unhandled: " + String(x));
}
// Compile error if a case is missing; runtime throw as a backstop.
console.log("two layers of safety");

Varsayılan Durum Olmadan Tüm Durumları Ele Alma

İşlevinizin açık bir dönüş türü varsa ve switch her durumu kapsıyorsa TypeScript eksik dönüşü de bildirebilir; bu da tüm durumların ele alındığını denetlemenin başka bir biçimidir.

type Light = "red" | "yellow" | "green";
function next(l: Light): Light {
  switch (l) {
    case "red": return "green";
    case "yellow": return "red";
    case "green": return "yellow";
  }
  // No default needed; all cases return.
}
console.log(next("red"));

If/else Zincirleriyle Tüm Durumları Ele Alma

Aynı fikir if/else için de geçerlidir. Her çeşidi ele aldıktan sonra son else dalı bir never değeri alır.

function assertNever(x: never): never { throw new Error("bad"); }
type Shape =
  | { kind: "circle"; radius: number }
  | { kind: "square"; side: number };

function name(s: Shape): string {
  if (s.kind === "circle") return "circle";
  else if (s.kind === "square") return "square";
  else return assertNever(s);
}
console.log(name({ kind: "square", side: 2 }));

never Neden Doğru Araçtır?

never hiçbir şeye atanamadığı için geride kalan herhangi bir çeşit atamayı bozar. Bu nedenle never, ele alınmamış durumları saptamak için kusursuz bir araçtır.

// Only never is assignable to never.
let x: never;
// x = "hi"; // Error
// Any concrete leftover type fails the same way.
console.log("never catches gaps");

Yeniden Düzenleme İçin Güvenlik Ağı Olarak Tüm Durumları Ele Alma

Her yerde assertNever kullandığınızda yeni bir birleşim üyesi eklemek, güncellemeniz gereken her yeri tam olarak gösteren düzenli bir derleme hataları listesi oluşturur.

function assertNever(x: never): never { throw new Error("unhandled"); }
type Status = "idle" | "busy";
function render(s: Status): string {
  switch (s) {
    case "idle": return "Idle";
    case "busy": return "Busy";
    default: return assertNever(s);
  }
}
console.log(render("idle"));

Hızlı Kontrol: Tüm Durumları Ele Alma

Tüm durumları ele alma denetimi konusundaki anlayışınızı sınayın.

Özet: never ile Tüm Durumları Ele Alma

Derleyicinin her çeşidi ele almanızı zorunlu kılması için varsayılan değeri never türüne atamayı veya bu değeri assertNever işlevine aktarmayı öğrendiniz. Böylece unutulan durumlar derleme hatalarına dönüşür.

function assertNever(x: never): never { throw new Error("unhandled"); }
type Shape = { kind: "circle"; radius: number } | { kind: "square"; side: number };
function f(s: Shape) {
  switch (s.kind) {
    case "circle": return s.radius;
    case "square": return s.side;
    default: return assertNever(s);
  }
}
console.log(f({ kind: "circle", radius: 5 }));

Sıkça Sorulan Sorular

“never ile Eksiksizlik Denetimi” dersi ücretsiz mi?

Evet — “never ile Eksiksizlik Denetimi” 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 4 dersten oluşur.

“never ile Eksiksizlik Denetimi” dersinde ne öğreneceğim?

İşlenmemiş durumları derleme zamanında never ile yakalayı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, 4 dersinin 3. dersidir.

“never ile Eksiksizlik Denetimi” 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. Ayrıştırılmış Birleşimler Oluşturma
  2. Ayırt Edici Üzerinden Daraltma
  3. never ile Eksiksizlik Denetimi
  4. Durum Makinelerini Modelleme
← TypeScript Academy Sayfasına Dön