0Pricing
TypeScript Academy · Ders

Maliyetli Tür İşlemlerinden Kaçınma

Derinlemesine yinelemeli veya dağıtıcı türleri belirleyip düzeltin

Maliyetli Tür İşlemlerinden Kaçınma, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.

Bir Tür İşlemini Pahalı Kılan Nedir?

Derin özyinelemeli türler, büyük birleşim dağılımları ve karmaşık çıkarım zincirleri, TypeScript'i çok sayıda tür çeşitlemesi oluşturmaya zorlayarak üstel yavaşlamalara neden olur.

// Expensive: distributes over every member of a large union
type FilterStrings<T> = T extends string ? T : never;
type Result = FilterStrings<string | number | boolean | null | undefined | ...>;

Aşırı Birleşim Boyutlarından Kaçının

Yüzlerce üyeye sahip birleşimler (örneğin, çok sayıda dize sabitinden oluşanlar) tür denetimini çok yavaşlatabilir. Etki alanını daraltmayı veya doğrulamayla birlikte dize kullanmayı düşünün.

// Expensive
type HugeUnion = "a" | "b" | "c" | /* 200 more ... */ "z";
// Better: string with a runtime check
function isValid(s: string): s is ValidString { return VALID_SET.has(s); }

Karmaşık Tür Takma Adları Yerine Arayüzleri Tercih Edin

TypeScript, arayüzleri karmaşık tür takma adı kesişimlerinden daha agresif biçimde önbelleğe alır. Birçok kez başvurulan nesne yapılarını tanımlamak için interface kullanmayı tercih edin.

// Slow: recomputed union intersection each time
type BigObject = TypeA & TypeB & TypeC & TypeD;
// Fast: interface (cached)
interface BigObject extends TypeA, TypeB, TypeC, TypeD {}

Özyineleme Derinliğini Sınırlayın

Özyinelemeli koşullu türler güçlüdür, ancak TypeScript'in derinlik sınırına (genellikle 100 seviye) ulaşabilir. Erken sonlandırmak için bir derinlik sayacı ekleyin.

type Flatten<T, Depth extends number[] = []> =
  Depth["length"] extends 10 ? T
  : T extends (infer U)[] ? Flatten<U, [...Depth, 0]>
  : T;

Ara Türleri Önbelleğe Alın

TypeScript'in karmaşık ara türleri önbelleğe alıp yeniden kullanabilmesi için bunlara ad verin; böylece her başvuruda yeniden hesaplanmaları gerekmez.

// Before: recomputed at each use
type MyResult<T> = T extends SomeComplex<infer U> ? Transform<U> : never;

// After: split into named intermediates
type ExtractU<T> = T extends SomeComplex<infer U> ? U : never;
type MyResult<T> = Transform<ExtractU<T>>;

Büyük Nesnelerde Derin Eşlemeli Türlerden Kaçının

DeepReadonly'u çok büyük bir nesne türüne uygulamak, TypeScript'in her özelliği özyinelemeli olarak dolaşmasına neden olur ve bu işlem pahalıdır.

// Expensive on 50-property nested objects
type Safe = DeepReadonly<HugeConfig>;
// Better: annotate at creation time with const assertions

Tembel Genel Tür Değerlendirmesi Kullanın

Pahalı bir türü, onu döndüren bir işlev türü olan thunk içine sarmak, değerlendirmeyi türe gerçekten ihtiyaç duyulana kadar erteler.

// Lazy evaluation via wrapper
type Lazy<T> = () => T;
type ExpensiveLazy = Lazy<DeepReadonly<HugeConfig>>;

Açık Dönüş Türlerini Tercih Edin

İşlev dönüş türlerini açıkça belirtmek, TypeScript'in bunları her çağrı noktasında tekrar tekrar çıkarsamasını önleyerek tür denetimini hızlandırır.

// Let TypeScript infer (may be slow for complex functions)
function process(data: Input) { return transform(data); }

// Faster: explicit annotation
function process(data: Input): Output { return transform(data); }

Paralel Denetim için isolatedDeclarations

TypeScript 5.5+ isolatedDeclarations, açık dönüş türleri gerektirir ve bağımsız dosyaların tam çıkarım yapılmadan paralel olarak denetlenmesini sağlar.

// tsconfig.json
{
  "compilerOptions": {
    "isolatedDeclarations": true
  }
}

Yalıtım için Proje Başvuruları

Proje başvuruları, TypeScript'in değişmemiş paketleri tür denetiminden geçirmesini önler; bu, büyük tek depolu monorepolarda en büyük kazanımı sağlar.

# With project references:
# tsc --build only recompiles packages whose sources changed
# Unchanged packages: declaration files used directly

Özet: Pahalı Türlerden Kaçınma

TypeScript'i hızlı tutmak için devasa birleşimlerden kaçının, ara türleri önbelleğe alın, karmaşık takma adlar yerine arayüzleri tercih edin, özyineleme derinliğini sınırlayın, açık dönüş türleri kullanın ve paketleri proje başvurularıyla yalıtın.

Hızlı Kontrol

TypeScript'in bir nesne yapısını daha agresif biçimde önbelleğe almasına hangi yaklaşım yardımcı olur?

Öğrendikleriniz

Pahalı TypeScript tür işlemleri arasında büyük birleşimler, derin özyineleme ve tekrarlanan karmaşık çıkarımlar bulunur. Ara türleri önbelleğe alarak, arayüzleri tercih ederek, birleşim boyutlarını sınırlayarak ve monorepolar için proje başvurularını kullanarak performansı iyileştirin.

Sıkça Sorulan Sorular

“Maliyetli Tür İşlemlerinden Kaçınma” dersi ücretsiz mi?

Evet — “Maliyetli Tür İşlemlerinden Kaçınma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.

“Maliyetli Tür İşlemlerinden Kaçınma” dersinde ne öğreneceğim?

Derinlemesine yinelemeli veya dağıtıcı türleri belirleyip düzeltin TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Maliyetli Tür İşlemlerinden Kaçınma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yavaş TypeScript Derlemesinin Profilini Çıkarma
  2. Maliyetli Tür İşlemlerinden Kaçınma
  3. skipLibCheck ve Yalıtılmış Bildirimler
  4. CI'da Tür Denetimi: Stratejiler ve Araçlar
← TypeScript Academy Sayfasına Dön