CodeBlanks Logo Icon CodeBlanks

Özet - Type guards

Type guard'larla güvenli bir veri doğrulama katmanı yazarsın.

Özet - Type guards

type guard'lar, güvenli bir veri doğrulama katmanı oluşturmak için bir araya getirilebilir. User-defined guard is ile daraltma yapar; assertion function asserts ile throw ederek daraltır. Primitive guard'lar typeof ile ilkel türleri kontrol eder. Birlikte unknown bir girdiyi güvenli şekilde işlerler.

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

function assertNumber(x: unknown): asserts x is number {
  if (typeof x !== "number") throw new Error("not number");
}

function process(v: unknown): string {
  if (isString(v)) return `string: ${v}`;
  assertNumber(v);
  return `number: ${v}`;
}

Uygulama Veri doğrulama katmanı yaz

isString(x: unknown): x is string guard fonksiyonunu tanımla (typeof x === "string" ile). assertNumber(x: unknown): asserts x is number fonksiyonunu tanımla (typeof x !== "number" ise throw new Error("not number")). process(v: unknown): string fonksiyonunu yaz: eğer isString(v) true ise `string: ${v}` döndür; değilse assertNumber(v) çağır ve `number: ${v}` döndür. console.log(process("hello")) ve console.log(process(42)) ile sonuçları yazdır.

Başlangıç kodu

index.ts
// isString guard fonksiyonunu tanımla (string predicate, typeof ile)

// assertNumber fonksiyonunu tanımla (asserts x is number, throw ile)

// process(v: unknown): string fonksiyonunu guard ve assert ile yaz

// process("hello") ve process(42) sonuçlarını yazdır

Örnek çözüm

index.ts
function isString(x: unknown): x is string {
  return typeof x === "string";
}

function assertNumber(x: unknown): asserts x is number {
  if (typeof x !== "number") {
    throw new Error("not number");
  }
}

function process(v: unknown): string {
  if (isString(v)) {
    return `string: ${v}`;
  }
  assertNumber(v);
  return `number: ${v}`;
}

console.log(process("hello"));
console.log(process(42));

Beklenen çıktı

string: hello
number: 42

Soru ve cevaplar

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

1 Type guard (is) ve assertion function (asserts) arasındaki temel fark nedir?

  • Guard yalnızca sınıflarla çalışır
  • Guard true/false döndürür, assertion throw yapar veya daraltır Doğru cevap
  • Assertion yalnızca primitive türlerle çalışır
  • İkisi de aynıdır

Açıklama: is ile type guard true/false döndürür ve if koşuluyla daraltır; asserts ile assertion function ya tamam olarak daraltır ya da throw yapar, if gerekmez.

2 assertNumber assertion

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

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

3 Type guards özet eşleştirmesi

Kavram Anlamı
is (type guard) true/false döndürür
asserts (assertion) throw veya daraltma
typeof ilkel tür kontrolü
unknown guard ile güvenli daraltma

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