TypeScript 7'nin yeni Go tabanlı derleyicisi tsgo, ESLint, ts-jest ve ts-morph gibi popüler geliştirme araçlarını şimdiden bozmaya başladı. Bu bozulmalar, derleyicinin programatik API'si yaklaşan 7.1 sürümünde stabilize olana kadar devam edecektir; bu da bu araçlara güvenen ekiplerin yükseltme planlarını duraklatması gerektiği anlamına gelir.
TypeScript 7'de neler değişti
Bu sürüm, TypeScript ekibinin Project Corsa kod adını verdiği tip denetleyicinin (type-checker) bir Go portu olan tsgo'yu tanıttı. Çekirdeği JavaScript'ten Go'ya taşıyarak derleyici, CI süreçlerinden dakikalar kazanmak isteyen erken benimseyenlerin ilgisini çeken bir başlıkla, derlemeleri on kata kadar daha hızlı gerçekleştirebiliyor.
Araçlar neden hata veriyor
TypeScript ile çalışan araçlar, tip denetleyicisiyle doğrudan iletişim kurmazlar. Tip bilgilerini, teşhisleri (diagnostics) ve AST gezintisini (AST traversal) açığa çıkaran bir dizi dahili API'yi çağırırlar. Bu API'ler tsgo için yeniden yazıldı ve 7.1 sürümüne kadar değişkenlik göstermeye devam ediyor. Sonuç ise bir dizi çökme ve sessiz hata (silent failure) oluyor:
- typescript-eslint – npm, TypeScript 7 ile birlikte kurulmasını reddediyor; kurulum zorlandığında ise ESLint bir
TypeErrorfırlatıyor. - ts-jest – Go sürümünde artık mevcut olmayan dahili metotları çağırmaya çalışıyor, bu da test dosyası dönüşümünün (transformation) yarıda kesilmesine neden oluyor.
- ts-morph – kod yapısını gezmek için kararlı bir API bekliyor; mevcut API ile yanlış sonuçlar döndürebilir veya uyarı vermeden hata verebilir.
- Monorepos – tsgo, belirli generic tip parametrelerini düşürüyor; bu da yalnızca büyük, çok paketli projelerde ortaya çıkan tip hatalarına yol açıyor.
Linting, Jest testi veya kod analizini TypeScript 7 ile birleştiren her iş akışı muhtemelen hatalı derlemelerle (red builds) karşılaşacaktır.
Kimler etkileniyor
- Her pull request'in bir parçası olarak ESLint çalıştıran ön uç (front-end) ekipleri.
- Birim testleri (unit testing) için ts-jest'e güvenen arka uç (back-end) servisleri.
- Kod üretimi veya dokümantasyon için ts-morph kullanan kütüphaneler.
- Tip çıkarımının (type inference) halihazırda karmaşık olduğu monorepo kurulumlarına sahip organizasyonlar.
Eğer bir TypeScript yükseltmesinden sonra CI hattınız kırmızıya döndüyse, suçlu muhtemelen yukarıdakilerden biridir.
7.1 sürümüne kadar güvenli bir geçiş yolu
Araçları bozmadan hız kazanımlarını korumanın en basit yolu, hızlı tip denetleme adımını asıl derleme işleminden ayırmaktır:
- Ana TypeScript sürümünü 6.x sürümüne sabitleyin – bu, tüm araçların beklediği kararlı API'yi korur.
@typescript/native-previewpaketini bir dev dependency olarak ekleyin – bu paket, CI'da hızlı tip denetimi için tsgo binary dosyasını içerir.- Hızlı kontroller için tsgo'yu
--noEmitile çalıştırın – tipleri doğrular ancak çıktı dosyaları üretmez. - Asıl derlemeler için klasik
tscderleyicisini kullanın –tschâlâ JavaScript üretir ve 6.x API'sine uyar.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview
package.json betiklerinizi (scripts) güncelleyin:
{
"scripts": {
"typecheck:fast": "tsgo --noEmit",
"build": "tsc"
}
}
Bu ikili kurulumla, ESLint, ts-jest ve ts-morph ile uyumluluğu korurken CI'daki on katlık hız artışından yararlanmaya devam edersiniz.
Ne zaman doğrudan 7.0 sürümüne yükseltebilirsiniz
Eğer kod tabanınız yalnızca tsc komutunu çağırıyorsa (linting, Jest veya ts-morph yoksa), o zaman kararsız API sizi etkilemez. Bu dar senaryoda, doğrudan TypeScript 7'ye geçebilir ve ek adımlara gerek duymadan performans artışının tadını çıkarabilirsiniz.
Nelere dikkat edilmeli
- Sürüm 7.1 – TypeScript ekibi, programatik API'nin bu sürümde dondurulacağını (frozen) belirtti. Sürüm yayınlandığında, tsgo ile mevcut araçlar arasındaki köprü ortadan kalkacak ve temiz bir yükseltmeye olanak tanıyacaktır.
- Araç güncellemeleri –
typescript-eslint,ts-jestvets-morphün yeni sürümlerini takip edin. 7.1 yayınlandıktan kısa bir süre sonra uyumlu sürümlerini paylaşacaklardır. - CI yapılandırması – API stabilize olduğunda
tsgo --noEmitkomutunu normal birtscçağrısıyla değiştirmeyi unutmayın; önizleme (preview) paketine artık ihtiyaç duyulmayacaktır.
Özet: 7.1 API kilitlemesine kadar, ana derleyiciniz için TypeScript 6.x sürümünde kalın, hızlı kontroller için @typescript/native-preview paketini ekleyin ve derlemeler için tsc kullanmaya devam edin. Bu sayede, yeni Go motorunun performans avantajlarından yararlanırken bozuk linting ve test süreçlerinden kaçınmış olursunuz.
