CodeBlanks Logo Icon CodeBlanks

Özet - Type narrowing

Daraltmayla bir karışık veri ayrıştırıcı yazarsın.

Özet - Type narrowing

Type narrowing, bir union türünü belirli bir dalda alt türe indirmektir. typeof ilkel türleri, in nesne özelliklerini, instanceof sınıfları daraltır. Doğru aracı seçmek veriye bağlıdır: ilkel değerler için typeof, farklı şekillerdeki nesneler için in, sınıf örnekleri için instanceof kullanılır.

type Data = string | number | { name: string } | Error;

function describe(d: Data): string {
  if (typeof d === "string") return `string: ${d}`;
  if (typeof d === "number") return `number: ${d}`;
  if (d instanceof Error) return `error: ${d.message}`;
  if ("name" in d) return `object: ${d.name}`;
  return "unknown";
}

Uygulama Karışık veri ayrıştırıcı yaz

Data = string | number | { name: string } | Error türünü tanımla. describe(d: Data): string fonksiyonunu yaz. Sırayla: typeof d === "string" ise `string: ${d}` döndür; typeof d === "number" ise `number: ${d}` döndür; d instanceof Error ise `error: ${d.message}` döndür; değilse `object: ${d.name}` döndür. console.log(describe("hello")), console.log(describe(42)), console.log(describe({ name: "table" })) ile sonuçları yazdır.

Başlangıç kodu

index.ts
// Data türünü tanımla: string | number | { name: string } | Error

// describe(d: Data): string fonksiyonunu sırayla typeof, typeof, instanceof, else ile yaz

// describe("hello"), describe(42), describe({ name: "table" }) sonuçlarını yazdır

Örnek çözüm

index.ts
type Data = string | number | { name: string } | Error;

function describe(d: Data): string {
  if (typeof d === "string") return `string: ${d}`;
  if (typeof d === "number") return `number: ${d}`;
  if (d instanceof Error) return `error: ${d.message}`;
  return `object: ${d.name}`;
}

console.log(describe("hello"));
console.log(describe(42));
console.log(describe({ name: "table" }));

Beklenen çıktı

string: hello
number: 42
object: table

Soru ve cevaplar

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

1 Aşağıdaki daraltma yöntemlerinden hangisi sınıf örnekleri için uygundur?

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

Açıklama: Sınıf örneklerini daraltmak için instanceof kullanılır; prototip zincirini kontrol eder ve doğru sınıfa daraltır. typeof nesneler için yalnızca "object" döner, sınıf adını vermez.

2 Doğru daraltma aracı

Soru
type Data = string | { name: string };

function label(d: Data): string {
  if (____) {
    return d;
  }
  return d.name;
}
Cevap
type Data = string | { name: string };

function label(d: Data): string {
  if (typeof d === "string") {
    return d;
  }
  return d.name;
}

Açıklama: İlkel string değerini daraltmak için typeof kullanılır; d instanceof string hata verir çünkü string ilkel bir değerdir ve constructor değildir.

3 Type narrowing özet eşleştirmesi

Kavram Anlamı
typeof ilkel türleri daraltır
in operatörü nesne özelliklerine göre daraltır
instanceof sınıflara göre daraltır
Daraltma (narrowing) union türünü dala indirir

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