TypeScript 7.0 Yayınlandı: Go ile 10 Kat Hız
Microsoft, TypeScript 7.0’ın kararlı sürümünü duyurdu. Yeni sürüm, TypeScript’in Go diline taşınmış native portunu barındırıyor ve tam derlemelerde tipik olarak 8x ile 12x arasında hız artışı sağlıyor. Bu yazıda, TypeScript 7.0’ın getirdiği somut değişiklikleri, performans rakamlarını, yeni komut satırı bayraklarını ve TypeScript 6.0 ile yan yana çalıştırma yöntemini bulacaksınız.
Ne Değişti: Native Port ve Paylaşımlı Bellek
TypeScript ekibi, geçtiğimiz yıl derleyicinin ve dil hizmetinin Go ile yeniden yazılacağını duyurmuştu. Yeni kod tabanı, orijinal kod tabanının yapısını ve mantığını mümkün olduğunca sadık biçimde koruyacak şekilde yazıldı; böylece iki derleyici arasında sonuçların tutarlı kalması hedeflendi. Temel fark ise native kod hızı, paylaşımlı bellek üzerinde çok iş parçacıklı çalışma ve yeni optimizasyonlar.
Yeni sürümü diğer sürümler gibi npm üzerinden kurabilirsiniz:
npm install -D typescript
Bu komut çalışma alanınıza yeni tsc çalıştırılabilirini bırakır ve npx tsc ile çağırabilirsiniz. Editör tarafında ise TypeScript 7, yeni Language Server Protocol (LSP) desteğiyle birlikte geliyor. VS Code için TypeScript 7’ye özel bir uzantı yayımlandı; Visual Studio ise çalışma alanınıza göre TypeScript 7’yi otomatik olarak etkinleştirebiliyor.
Gerçek Projelerde Performans Rakamları
Microsoft, açık kaynaklı büyük kod tabanlarında TypeScript 6 ile TypeScript 7 arasında karşılaştırmalı derleme süreleri paylaştı. Sonuçlar varsayılan yapılandırmayla (4 checker) elde edildi:
| Kod tabanı | TypeScript 6 | TypeScript 7 | Hızlanma |
|---|---|---|---|
| vscode | 125.7s | 10.6s | 11.9x |
| sentry | 139.8s | 15.7s | 8.9x |
| bluesky | 24.3s | 2.8s | 8.7x |
| playwright | 12.8s | 1.47s | 8.7x |
| tldraw | 11.2s | 1.46s | 7.7x |
Bellek tüketimi de düştü. Örneğin vscode kod tabanında TypeScript 6, 5.2 GB kullanırken TypeScript 7 aynı derleme için 4.2 GB kullanıyor (%18 azalma). bluesky’da bu fark %26’ya kadar çıkıyor. Editör tarafında ise VS Code kod tabanında hatalı bir dosyayı açtığınızdan ilk hatayı gördüğünüz ana kadar geçen süre önceki 17.5 saniyeden 1.3 saniyenin altına iniyor.
Üretime Hazırlık ve Saha Geri Bildirimleri
TypeScript ekibi, sürümü stabilize etmek için hem kendi test paketini hem de dış kod tabanlarında otomatik regresyon testlerini yeniden çalıştırdı. Ayrıca Loop, Office, PowerBI, Teams, Xbox gibi Microsoft ekipleri ve Bloomberg, Canva, Figma, Google, Lattice, Linear, Miro, Notion, Sentry, Slack, Vanta, Vercel, VoidZero gibi şirketlerle önizleme sürümleri test edildi.
Microsoft’un paylaştığı veriler, TypeScript 7.0’ın yeni dil sunucusunda başarısız komut oranının TypeScript 6.0’a göre %80’in üzerinde, sunucu çökmelerinin ise %60’ın üzerinde azaldığını gösteriyor. Slack mühendisleri, TypeScript 7 ile birleştirme kuyruğu süresinin %40 azaldığını ve CI’daki tip denetim süresinin yaklaşık 7.5 dakikadan 1.25 dakikaya indiğini bildirdi. Canva ekibi ise editörde ilk hatanın görüntülenme süresinin yaklaşık 58 saniyeden 4.8 saniyeye düştüğünü aktardı. Vanta’nın en büyük projelerinden birinde 9x’e varan bir hızlanma raporlandı.
TypeScript 6.0 ile Yan Yana Çalıştırma
TypeScript 7.0 bir API ile birlikte gelmiyor. Ekip, TypeScript 7.1’in yeni ve farklı bir API ile geleceğini belirtiyor. Bu geçiş süresince, typescript-eslint gibi programatik erişime ihtiyaç duyan araçlar için TypeScript 6.0 ile yan yana çalışma önemli hale geliyor.
Bunun için @typescript/typescript6 adında yeni bir uyumluluk paketi yayımlandı. Bu paket, isim çakışmalarını önlemek üzere tsc6 adında bir çalıştırılabilir sağlar ve TypeScript 6.0 API’sini yeniden dışa aktarır. typescript-eslint gibi araçlar typescript paketini doğrudan peer bağımlılık olarak beklediği için npm alias yaklaşımı öneriliyor:
npm install -D typescript@npm:@typescript/typescript6
Ya da package.json dosyanızı şu şekilde düzenleyebilirsiniz:
{
"devDependencies": {
"typescript": "npm:@typescript/typescript6@^6.0.2"
}
}
Bu durumda yalnızca tsc6 çalıştırılabiliri elinizde olur. 7.0’ın tsc‘sini de eklemek için ikinci bir alias tanımlayabilirsiniz:
{
"devDependencies": {
"@typescript/native": "npm:typescript@^7.0.2",
"typescript": "npm:@typescript/typescript6@^6.0.2"
}
}
Bu yapılandırmayla npx tsc doğrudan 7.0 ile çalışır.
Nightly Sürümler: native-preview’dan next Etiketine
Şu ana kadar geliştiricilerin çoğu TypeScript 7’yi @typescript/native-preview paketiyle yüklüyordu. Bu paket haftalık 8.5 milyonun üzerinde indirmeye ulaştı. Bundan sonra nightly derlemeler, standart typescript paketi altında next etiketiyle yayımlanacak:
npm install -D typescript@next
Paralellik Kontrolü: –checkers, –builders ve –singleThreaded
TypeScript 7.0, ayrıştırma (parsing), tip denetimi ve çıktı üretimi (emit) gibi adımların çoğunu paralel olarak yürütüyor. Ayrıştırma ve emit büyük ölçüde dosyalar arası bağımsız olduğu için doğal biçimde ölçekleniyor. Tip denetimi ise dosyalar arasında ortak bağımlılıklar taşıdığı ve sonuçların sıra bağımlı olabilmesi nedeniyle daha dikkatli bir tasarım gerektiriyor.
Bu nedenle TypeScript 7.0, sabit sayıda tip denetimi çalışanı (worker) oluşturur; her biri aynı girdiye karşı aynı sonucu üretir. Varsayılan değer 4’tür ve deneysel --checkers bayrağıyla değiştirilebilir. Aynı testler --checkers 8 ile çalıştırıldığında sonuçlar şöyle:
| Kod tabanı | TypeScript 6 | TypeScript 7 (–checkers 8) | Hızlanma |
|---|---|---|---|
| vscode | 125.7s | 7.51s | 16.7x |
| sentry | 139.8s | 12.08s | 11.6x |
| bluesky | 24.3s | 2.01s | 12.1x |
| playwright | 12.8s | 1.16s | 11x |
| tldraw | 11.2s | 1.06s | 10.6x |
Çekirdek sayısı yüksek makinelerde checker sayısını artırmak süreleri daha da kısaltabilir, ancak bellek tüketimi artar. CI runner gibi kısıtlı ortamlarda ise değeri düşürmek mantıklı olabilir; --checkers 1 tip denetimini tamamen tek iş parçacıklı hale getirir. Nadir durumlarda checker sayısını değiştirmek sıralamaya duyarlı sonuçları ortaya çıkarabilir; bu yüzden ekiplerin ortamlar arasında sabit bir değer belirlemesi önerilir.
Yeni --builders bayrağı ise --build modunda aynı anda çalışabilecek proje referansı derleyicilerinin sayısını kontrol eder. Bu özellikle çok projeli monorepo’larda faydalıdır. --checkers ile çarpımsal bir etkisi vardır: --checkers 4 --builders 4 yapılandırması aynı anda 16 tip denetleyicisinin çalışmasına yol açabilir; dolayısıyla makinenize göre denge kurmak gerekir. Builders sayısını değiştirmek farklı sonuç üretmez; ancak projeler arası bağımlılık grafiği doğal bir darboğaz oluşturur.
--singleThreaded bayrağı ise ayrıştırma, tip denetimi ve emit dahil tüm adımları tek iş parçacığında çalıştırır. Hata ayıklama, TypeScript 6 ile 7 arasında performans karşılaştırması yapma veya paralel derlemeleri dışarıdan yönetme senaryolarında işe yarar.
Yeniden Yazılan –watch Modu
TypeScript 7, tamamen yeniden inşa edilmiş bir --watch moduyla geliyor. Yeni --watch, Parcel bundler’ın dosya izleyicisine dayanan bir temele oturuyor. Ekibin ilk denemesi periyodik polling üzerine kurulmuştu; bu, çapraz platformda çalışıyordu fakat özellikle node_modules içinde çok sayıda bağımlılık bulunan büyük projelerde hesaplama açısından pahalıydı.
Parcel’ın izleyicisi C++ ile yazılmış olduğu için doğrudan bağımlılık olarak kullanmak tam bir C++ araç zinciri gerektiriyordu. Ekip, bunu Go’ya, birkaç küçük assembly shim yardımıyla port etti. Başlangıçta C++’tan Go’ya doğrudan bir çeviri olan kod, ilerleyen aşamada idiomatik Go biçimine dönüştürüldü ve port edilmiş test paketini geçmeye devam ediyor. İzleyici, ne için ve neyi izlediğini net biçimde ayıran bağımsız bir paket olarak yaşıyor.
TypeScript 6.0’dan Devralınan Varsayılanlar
TypeScript 7.0, tip denetimi ve komut satırı davranışı bakımından TypeScript 6.0 ile uyumlu olacak biçimde tasarlandı. TypeScript 6.0’da stableTypeOrdering etkin ve ignoreDeprecations ayarsız biçimde temiz derlenen kodların büyük çoğunluğu TypeScript 7.0’da da aynı şekilde derlenmelidir. Ancak TypeScript 7.0, 6.0’ın yeni varsayılanlarını benimser ve 6.0’da devre dışı bırakılmış (deprecated) yapıları sert hatalarla karşılar.
Yapılandırmadaki dikkat çeken varsayılan değişiklikler şunlar:
strictvarsayılan olaraktrue.modulevarsayılan olarakesnext.target,esnext‘ten hemen önceki güncel kararlı ECMAScript sürümüne ayarlı.noUncheckedSideEffectImportsvarsayılan olaraktrue.libReplacementvarsayılan olarakfalse.stableTypeOrderingvarsayılan olaraktrueve kapatılamıyor.rootDirartık./‘a ayarlı; iç kaynak dizinlerini açıkça belirtmek gerekiyor.typesartık[]‘a ayarlı; eski davranışı geri getirmek için["*"]yazılabiliyor.
Ekip, en fazla sürpriz yaratabilecek değişikliklerin rootDir ve types olduğunu belirtiyor. tsconfig.json‘ı src gibi bir dizinin dışında tutan projelerde rootDir‘i açıkça ayarlamak gerekiyor:
{
"compilerOptions": {
"rootDir": "./src"
},
"include": ["./src"]
}
Belirli global bildirimlere bağımlı projelerde ise types listelenmelidir:
{
"compilerOptions": {
"types": ["node", "jest"]
}
}
Ayrıca target: es5 artık desteklenmiyor; bu, no-op davranışıyla sert hataya dönüşen deprecated ayarların başında geliyor.
Kaynaklar ve İleri Okuma
- Resmi duyuru: Announcing TypeScript 7.0
- Native port arka planı: A 10x Faster TypeScript
- VS Code için TypeScript 7 uzantısı: TypeScript (Native Preview)
- VS Code ekibinin deneyimi: Iterating Faster with TypeScript 7
- Slack mühendisliği paylaşımı: Slack Engineering
- Vanta’nın deneyimi: Chris Krycho
- Parcel Watcher deposu: parcel-bundler/watcher
- TypeScript 6.0 duyurusu: Announcing TypeScript 6.0
- TypeScript Go değişiklikleri: typescript-go CHANGES
- İlgili yazı: TypeScript 7.0 RC: Go ile Yeniden Yazıldı, 10 Kat Hızlandı
- İlgili yazı: TypeScript 7.0 Beta: Hız Değil, Asıl Mesaj Daha Büyük
- İlgili yazı: Visual Studio 2026 Insiders 3’te TypeScript 7 Beta Varsayılan







Yorum gönder