Type complexity
- TypeScript kursu
- Uzman
- Ders 23/35
- 4 dk
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
// 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
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
type Box<T> = T extends string ? T : ____;
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 |