CodeBlanks Logo Icon CodeBlanks

in operatörü

in operatörüyle özelliğe göre daraltma öğrenirsin.

in operatörü

in operatörü, bir özelliğin nesnede bulunup bulunmadığını kontrol eder. "swim" in animal gibi bir koşul, TypeScript'in union türü daraltmasını sağlar; özellik sadece bir üyede varsa, koşul içinde nesne o üye türe daraltılır.

interface Fish { swim(): void }
interface Bird { fly(): void }

function move(animal: Fish | Bird) {
  if ("swim" in animal) {
    animal.swim();  // Fish
  } else {
    animal.fly();  // Bird
  }
}

Nesne şekillerini ayırma

in operatörü, ortak bir alan yerine farklı alanlara sahip nesneleri ayırmak için idealdir. Her üyenin kendine özgü bir özelliği varsa, in ile o özelliğin kontrolü türlü daraltır. Discriminated union'larda ortak kind alanı kullanılır ama in daha esnektir.

interface Square { size: number }
interface Circle { radius: number }

function area(shape: Square | Circle): number {
  if ("radius" in shape) {
    return Math.PI * shape.radius ** 2;  // Circle
  }
  return shape.size ** 2;  // Square
}

Uygulama in ile şekilleri ayır

Square (size: number) ve Circle (radius: number) interface'lerini tanımla. area(shape: Square | Circle): number fonksiyonunu yaz. Eğer "radius" in shape ise Math.PI * shape.radius ** 2 döndür; değilse shape.size ** 2 döndür. console.log(area({ size: 5 })) ve console.log(area({ radius: 2 })) ile sonuçları yazdır.

Başlangıç kodu

index.ts
// Square (size: number) interface tanımla

// Circle (radius: number) interface tanımla

// area(shape: Square | Circle) fonksiyonunu in ile yaz

// area({ size: 5 }) ve area({ radius: 2 }) sonuçlarını yazdır

Örnek çözüm

index.ts
interface Square { size: number; }
interface Circle { radius: number; }

function area(shape: Square | Circle): number {
  if ("radius" in shape) {
    return Math.PI * shape.radius ** 2;
  }
  return shape.size ** 2;
}

console.log(area({ size: 5 }));
console.log(area({ radius: 2 }));

Beklenen çıktı

25
12.566370614359172

Soru ve cevaplar

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

1 in operatörü neyi kontrol eder?

  • Bir değerin türünü
  • Bir sınıfın üst sınıfını
  • Bir özelliğin nesnede var olup olmadığını Doğru cevap
  • İki nesnenin aynı yapıda olup olmadığını

Açıklama: in operatörü sol taraftaki özelliğin sağ taraftaki nesnede bulunup bulunmadığını döner; bu, union türlerin farklı şekillerdeki üyelerini ayırmak için kullanılır.

2 in ile özellik kontrolü

Soru
interface Fish { swim(): void }
interface Bird { fly(): void }

function move(a: Fish | Bird) {
  if (____) {
    a.swim();
  } else {
    a.fly();
  }
}
Cevap
interface Fish { swim(): void }
interface Bird { fly(): void }

function move(a: Fish | Bird) {
  if ("swim" in a) {
    a.swim();
  } else {
    a.fly();
  }
}

Açıklama: in operatörü "swim" özelliğinin nesnede olup olmadığını kontrol eder; özellik yalnızca Fish'te olduğundan koşul içinde a Fish'e daraltılır.

3 in operatörü parçaları

Kavram Anlamı
in operatörü nesnede özellik var mı
"swim" in animal Fish üyesine daraltır
interface nesne şeklini tanımlar
Discriminated union ortak kind alanı ile ayırma

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