CodeBlanks Logo Icon CodeBlanks

Primitives guard

İlkel türler için guard yazmayı öğrenirsin.

Primitives guard

İlkel türler için type guard yazarken typeof operatörü kullanılır. isString, isNumber, isBoolean gibi yardımcı fonksiyonlar, sık kullanılan typeof kontrollerini yeniden kullanılabilir hale getirir. Bu, kod tekrarını azaltır ve daraltmayı tutarlı kılar.

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

function isNumber(x: unknown): x is number {
  return typeof x === "number";
}

function isBoolean(x: unknown): x is boolean {
  return typeof x === "boolean";
}

Birden fazla guard

Birden fazla primitive guard'ı bir arada kullanarak karmaşık daraltmalar yapılabilir. Örneğin bir değerin string veya number olduğunu kontrol etmek için isString(v) || isNumber(v) kullanılır. Her guard, kendi dalında doğru türe daraltır.

function process(v: unknown): string {
  if (isString(v)) {
    return v.toUpperCase();  // string
  }
  if (isNumber(v)) {
    return v.toFixed(0);  // number
  }
  return "unknown";
}

Uygulama Primitive guard'larla unknown işle

isString(x: unknown): x is string ve isNumber(x: unknown): x is number guard fonksiyonlarını tanımla (her biri typeof ile kontrol yapsın). process(v: unknown): string fonksiyonunu yaz: eğer isString(v) true ise v.toUpperCase() döndür; değilse eğer isNumber(v) true ise v.toFixed(0) döndür; değilse "unknown" döndür. console.log(process("hello")), console.log(process(42)), console.log(process(true)) ile sonuçları yazdır.

Başlangıç kodu

index.ts
// isString ve isNumber guard fonksiyonlarını tanımla (typeof ile)

// process(v: unknown): string fonksiyonunu guard'larla yaz

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

Örnek çözüm

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

function isNumber(x: unknown): x is number {
  return typeof x === "number";
}

function process(v: unknown): string {
  if (isString(v)) {
    return v.toUpperCase();
  }
  if (isNumber(v)) {
    return v.toFixed(0);
  }
  return "unknown";
}

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

Beklenen çıktı

HELLO
42
unknown

Soru ve cevaplar

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

1 İlkel türler için type guard yazarken hangi operatör kullanılır?

  • instanceof
  • in
  • typeof Doğru cevap
  • as

Açıklama: İlkel türler (string, number, boolean) için typeof operatörü kullanılır; typeof x === "string" gibi bir kontrolle guard yazılır.

2 isNumber primitive guard

Soru
function isNumber(x: unknown): ____ {
  return typeof x === "number";
}
Cevap
function isNumber(x: unknown): x is number {
  return typeof x === "number";
}

Açıklama: x is number predicate'i, fonksiyon true döndürdüğünde x'in number olduğunu TypeScript'e söyler ve daraltma sağlar.

3 Primitives guard parçaları

Kavram Anlamı
typeof ilkel tür kontrolü
isString(x) string'e daraltır
isNumber(x) number'a daraltır
x is T predicate dönüş türü

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