TypeScript
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.
Örnek çözümü göster
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));
Kendini test et
-
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ı
- let yerine const kullanmak
Cevabı göster
Büyük birleşimlerin çapraz çarpımı — 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.
-
Örneklemeyi sınırla
type Box<T> = T extends string ? T : ____;
Cevabı göster
type Box<T> = T extends string ? T : never;
-
Tür karmaşıklığı parçaları
- 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
Sıradaki ders: traceAnalyzer