Assertion vs throw
- TypeScript kursu
- İleri seviye
- Ders 43/57
- 4 dk
Assertion ile hata fırlatma farkını öğrenirsin.
Assertion vs throw
Assertion function ile manuel throw arasındaki fark, assertion function'ın tip düzeyinde daraltma yapmasıdır. if (!x) throw new Error() manuel olarak da daraltır ama assertion function bu mantığı yeniden kullanılabilir hale getirir ve çağrıyı tek satırda yapar.
// Manuel throw ile daraltma
function manual(v: unknown): string {
if (typeof v !== "string") throw new Error("not string");
return v.toUpperCase();
}
// Assertion function ile daraltma
function assertString(x: unknown): asserts x is string {
if (typeof x !== "string") throw new Error("not string");
}
function withAssert(v: unknown): string {
assertString(v);
return v.toUpperCase();
}Yeniden kullanılabilirlik
Birden fazla yerde aynı doğrulama gerekli olduğunda, assertion function tanımlamak tekrarı önler. her çağrı noktasında if (...) throw ... yazmak yerine tek bir fonksiyon çağrılır; hata mesajı ve kontrol tek yerde tutulur.
function assertString(x: unknown): asserts x is string {
if (typeof x !== "string") throw new Error("not string");
}
// Yeniden kullanılır:
function upper(v: unknown): string {
assertString(v);
return v.toUpperCase();
}
function lower(v: unknown): string {
assertString(v);
return v.toLowerCase();
}Uygulama Assertion ile temiz daraltma
assertString(x: unknown): asserts x is string fonksiyonunu tanımla (typeof x !== "string" ise throw new Error("not string")). upper(v: unknown): string fonksiyonunu yaz: assertString(v) çağır, sonra v.toUpperCase() döndür. lower(v: unknown): string fonksiyonunu yaz: assertString(v) çağır, sonra v.toLowerCase() döndür. console.log(upper("hello")) ve console.log(lower("WORLD")) ile sonuçları yazdır.
Başlangıç kodu
// assertString fonksiyonunu tanımla (asserts x is string, throw ile)
// upper fonksiyonunu assertString ile yaz
// lower fonksiyonunu assertString ile yaz
// upper("hello") ve lower("WORLD") sonuçlarını yazdırÖrnek çözüm
function assertString(x: unknown): asserts x is string {
if (typeof x !== "string") {
throw new Error("not string");
}
}
function upper(v: unknown): string {
assertString(v);
return v.toUpperCase();
}
function lower(v: unknown): string {
assertString(v);
return v.toLowerCase();
}
console.log(upper("hello"));
console.log(lower("WORLD"));Beklenen çıktı
HELLO world
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Assertion function manuel throw'a göre ne avantaj sağlar?
- Çalışma zamanında daha hızlıdır
- Hata fırlatmaz
- Daraltma mantığını yeniden kullanılabilir kılar Doğru cevap
- Tüm türleri any yapar
Açıklama: Assertion function, throw ve daraltma mantığını tek bir yeniden kullanılabilir fonksiyona kapsüller; her çağrı noktasında if-throw yazmak yerine tek satır çağrı yeter.
2 Manuel throw yerine assertion
function process(v: unknown): string {
assertString(v);
return ____;
}
function process(v: unknown): string {
assertString(v);
return v.toUpperCase();
}
Açıklama: assertString(v) çağrısından sonra v string'e daraltıldığı için v.toUpperCase() doğrudan yazılabilir; tekrar kontrol veya cast gerekmez.
3 Assertion vs throw parçaları
| Kavram | Anlamı |
|---|---|
if (!x) throw ... |
manuel daraltma |
assertString(v) |
yeniden kullanılabilir daraltma |
asserts x is T |
tip düzeyinde daraltma |
throw new Error |
çalışma zamanı durdurma |