CodeBlanks Logo Icon CodeBlanks

Assertion function

asserts ile onaylama fonksiyonlarını öğrenirsin.

Assertion function

Assertion function, asserts x is T biçiminde bir dönüş türü kullanır. Fonksiyon normal şekilde tamamlandığında TypeScript, parametreyi T türüne daraltır; eğer koşul sağlanmazsa fonksiyon throw yapar. type guard true/false döndürürken, assertion function ya daraltır ya da hata fırlatır.

function assertString(x: unknown): asserts x is string {
  if (typeof x !== "string") {
    throw new Error("Expected string");
  }
}

function upper(v: unknown): string {
  assertString(v);
  return v.toUpperCase();  // v: string
}

Assert ve is farkı

is ile type guard, true/false döndüren bir fonksiyondur ve if koşuluyla daraltma yapar. asserts ile assertion function ise throw yaparak veya tamam olarak daraltma yapar; if koşulu gerekmez. Assert, hata durumunda çalışmayı durdurmak istediğinde kullanışlıdır.

// type guard
function isString(x: unknown): x is string {
  return typeof x === "string";
}

// assertion function
function assertString(x: unknown): asserts x is string {
  if (typeof x !== "string") throw new Error("not string");
}

function upper(v: unknown): string {
  assertString(v);  // sonraki satırda v: string
  return v.toUpperCase();
}

Uygulama assertString ile unknown işle

assertString(x: unknown): asserts x is string fonksiyonunu tanımla (içinde typeof x !== "string" ise throw new Error("not string") olsun). upper(v: unknown): string fonksiyonunu yaz: önce assertString(v) çağır, sonra v.toUpperCase() döndür. console.log(upper("hello")) ile sonucu yazdır.

Başlangıç kodu

index.ts
// assertString fonksiyonunu tanımla (asserts x is string, throw içersin)

// upper(v: unknown): string fonksiyonunu assertString ile yaz

// upper("hello") sonucunu yazdır

Örnek çözüm

index.ts
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();
}

console.log(upper("hello"));

Beklenen çıktı

HELLO

Soru ve cevaplar

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

1 asserts x is T dönüş türü nasıl davranır?

  • T türünü otomatik oluşturur
  • Fonksiyon true/false döndürür
  • Çalışma zamanında hiçbir şey yapmaz
  • Fonksiyon tamamlandığında x'i T'ye daraltır, değilse throw beklenir Doğru cevap

Açıklama: asserts x is T dönüş türü, fonksiyon normal tamamlandığında x'i T'ye daraltır; throw yapılırsa akış durur ve daraltma gerçekleşmez. if koşulu gerekmez.

2 asserts ile assertion

Soru
function assertString(x: unknown): ____ {
  if (typeof x !== "string") throw new Error("not string");
}
Cevap
function assertString(x: unknown): asserts x is string {
  if (typeof x !== "string") throw new Error("not string");
}

Açıklama: asserts x is string dönüş türü, fonksiyon tamamlandığında x'in string olduğunu TypeScript'e söyler; throw yapılırsa daraltma olmaz.

3 Assertion function parçaları

Kavram Anlamı
asserts x is T assertion function dönüş türü
assertString(v) tamamlarsa v string'e daraltır
throw new Error koşul sağlanmazsa
is ile type guard true/false döndürür

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