CodeBlanks Logo Icon CodeBlanks

Type complexity

Tür karmaşıklığının derleme süresine etkisini öğrenirsin.

Tür karmaşıklığı nedir?

Tür karmaşıklığı, bir türün çözümlenmesi için gereken hesaplama maliyetidir. TypeScript, her generic örnekleme, birleşim çaprazı ve özyinelemeli genişletme için ek işlem yapar; bu sayıya instantiation count denir. Yüksek sayılar derleme süresini doğrudan uzatır.

type Deep<N> = N extends 0
  ? unknown
  : { next: Deep<N-1> };
// N büyükse instantiation patlaması

Büyük birleşimleri çarpmak (ör. A × B × C) en yaygın darboğazdır.

Karmaşıklığı azaltma

Tür karmaşıklığını azaltmanın üç temel yolu vardır: büyük birleşimleri gruplara böl, derin özyinelemeli türleri sığ tut ve gereksiz generic örneklemelerden kaçın. type instantiationCount genelde en pahalı tür etrafında yoğunlaşır; onu basitleştirmek tüm derlemeyi hızlandırır.

// kötü: 10 × 10 × 10 = 1000
<A extends U1, B extends U2, C extends U3>
// iyi: tek parametre, iç içe değil

İzleme araçları en pahalı türü işaret eder.

Uygulama Örneklemeleri say

Bir countInstantiations fonksiyonu yaz: tür listesindeki her türün params alanını toplasın. Box(1), Pair(2), Triple(3) için toplamı yazdır.

Başlangıç kodu

index.ts
// türlerin parametre sayısını topla
// her tür için params alanını ekle
// toplamı döndür
// sonucu yazdır

Örnek çözüm

index.ts
function countInstantiations(types: { name: string; params: number }[]): number {
  let instantiations = 0;
  for (const t of types) {
    instantiations += t.params;
  }
  return instantiations;
}

const types = [
  { name: "Box", params: 1 },
  { name: "Pair", params: 2 },
  { name: "Triple", params: 3 }
];
console.log(countInstantiations(types));

Beklenen çıktı

6

Soru ve cevaplar

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

1 Aşağıdakilerden hangisi derleme süresini anlamlı biçimde artırır?

  • Kodlara yorum eklemek
  • Noktalı virgül kullanmak
  • Büyük birleşimlerin çapraz çarpımı Doğru cevap
  • let yerine const kullanmak

Açıklama: Büyük birleşimlerin çarpımı instantiation sayısını üssel olarak büyütür ve derleme süresini ciddi uzatır; const, yorum ve noktalı virgül derleme süresini etkilemez.

2 Örneklemeyi sınırla

Soru
type Box<T> = T extends string ? T : ____;
Cevap
type Box<T> = T extends string ? T : never;

Açıklama: Gereksiz örneklemeyi kesmek için never kullanılır; any kontrolü devre dışı bırakır, unknown genişletmeyi sürdürür, object ise farklı bir anlam taşır.

3 Tür karmaşıklığı parçaları

Kavram Anlamı
Instantiation count tür çözümleme sayısı
Birleşim çarpımı üssel büyüme kaynağı
Derin özyineleme ağaç genişletme maliyeti
Basitleştirme maliyeti düşürür

Uzman bölümündeki tüm dersler