TypeScript
Compile-time güvenlik
Derleme zamanı güvenliğini garanti etmeyi öğrenirsin.
Compile-time güvenlik
Exhaustive check ile derleme zamanı güvenliği sağlanır. Yeni bir union üyesi eklendiğinde, tüm switch'lerdeki case'ler artık tükenmiş değildir; assertNever çağrısı derleme hatası verir ve eksik yerleri bildirir. Bu, çalışma zamanı hatalarını önler.
type Status = "pending" | "paid" | "shipped";
function label(s: Status): string {
switch (s) {
case "pending": return "Beklemede";
case "paid": return "Ödendi";
case "shipped": return "Gönderildi";
default: return assertNever(s);
}
}
Çalışma zamanı vs derleme zamanı
assertNever fonksiyonu çalışma zamanında throw yapar; asıl değeri derleme zamanındadır. Eğer tüm case'ler yazılırsa, default dalına hiç gelinmez ve throw asla çalışmaz. Asıl koruma, derleyicinin eksik case'i yakalamasıdır.
function assertNever(x: never): never {
throw new Error("Unexpected: " + x);
}
// Tüm case'ler yazılıysa default'a hiç gelinmez
// assertNever asla çağrılmaz
Uygulama Status label with exhaustive check
assertNever(x: never): never fonksiyonunu tanımla (içinde throw new Error("Unexpected") olsun). Status = "pending" | "paid" | "shipped" union türünü tanımla. label(s: Status): string fonksiyonunu switch (s) ile yaz: pending için "Beklemede", paid için "Ödendi", shipped için "Gönderildi", default için return assertNever(s); yaz. console.log(label("shipped")) ile sonucu yazdır.
Örnek çözümü göster
function assertNever(x: never): never {
throw new Error("Unexpected");
}
type Status = "pending" | "paid" | "shipped";
function label(s: Status): string {
switch (s) {
case "pending":
return "Beklemede";
case "paid":
return "Ödendi";
case "shipped":
return "Gönderildi";
default:
return assertNever(s);
}
}
console.log(label("shipped"));
Kendini test et
-
Exhaustive check derleme zamanı güvenliğini nasıl sağlar?
- Çalışma zamanında throw yapar
- Tüm case'leri otomatik yazar
- Yeni üye eklendiğinde eksik case'leri derleyici bildirir
- never türünü kaldırır
Cevabı göster
Yeni üye eklendiğinde eksik case'leri derleyici bildirir — Yeni üye eklendiğinde, eksik case'lerin bulunduğu switch'lerde default dalındaki değişken never olmaz; assertNever çağrısı derleme hatası verir ve eksik yerleri bildirir.
-
Status exhaustive switch
function assertNever(x: never): never {
throw new Error("Unexpected");
}
type Status = "pending" | "paid" | "shipped";
function label(s: Status): string {
switch (s) {
case "pending": return "Beklemede";
case "paid": return "Ödendi";
case "shipped": return "Gönderildi";
default:
return ____;
}
}
Cevabı göster
function assertNever(x: never): never {
throw new Error("Unexpected");
}
type Status = "pending" | "paid" | "shipped";
function label(s: Status): string {
switch (s) {
case "pending": return "Beklemede";
case "paid": return "Ödendi";
case "shipped": return "Gönderildi";
default:
return assertNever(s);
}
}
-
Compile-time güvenlik parçaları
- assertNever(x: never)
- parametresi never olmalı
- Tüm case'ler
- default'a gelinmez
- Yeni üye eklenince
- eksik case derleyicide hata
- Derleme zamanı
- asıl güvenlik burada
Sıradaki ders: Özet - Exhaustive check