Exploring Infinite Possibilities on FrontEnd 🚀
Burak Sağlık
Search...

Sun Aug 09 2026

TypeScript 7 Rust Derleyici Geçişi: Hız, Hatalar ve Geçiş Rehberi

TypeScript 7 Rust Derleyici Geçişi: Hız, Hatalar ve Geçiş Rehberi

🎯 Giriş: TypeScript 7 Neden Önemli?

Merhaba! 👋
TypeScript 7’nin duyurulduğunu duydun mu? Ben de ilk duyduğumda “Bu ne değişiyor?” diye merak ettim. Bu yazıda, yeni sürümün getirdiği en kritik değişiklikleri ve neden bu kadar önemli olduğunu kısa ve öz anlatacağım.

Ne öğreneceksin?

  • 🎯 Yeni tip sistemi iyileştirmeleri — daha az hata, daha fazla güven
  • Performans artışı — derleme süreleri nasıl kısaldı?
  • 🛠 Geliştirici deneyimi (DX) yenilikleri — IDE desteği, hata mesajları vs.
  • 🔁 Geri uyumluluk — mevcut projelerine nasıl entegre edersin?
  • Pratik bir göç rehberi — adım adım ne yapmalısın?

Hazırsan, beraber TypeScript 7’nin neden bu kadar büyük bir adım olduğunu keşfedelim! 🚀


🔁 Arka Planda Ne Oldu? Rust Tabanlı Derleyiciye Geçiş

Hazırsan başlayalım 🎯

TypeScript ekibi son yılların en cesur hamlesini yaptı: derleyiciyi JavaScript'ten Rust'a taşıdılar. Bu ne anlama geliyor, neden yaptılar, sizin kodunuz için ne değişti? Hadi pratik bir bakış açısıyla anlayalım 🛠

🤔 Neden Rust? Neden Şimdi?

Yıllardır tsc (TypeScript Compiler) Node.js üzerinde çalışan bir JavaScript programıydı. Bu demek ki:

  • Derleyici kendisi de V8 motoru tarafından yorumlanıyordu (JIT derleme)
  • Büyük projelerde bellek tüketimi ve başlatma gecikmesi hissediliyordu
  • Tek iş parçacığı (single-threaded) doğası, çok çekirdekli işlemcileri tam kullanamıyordu

Rust seçilmesinin temel sebepleri şunlar 👇

  • AOT (Ahead-of-Time) derleme → doğrudan makine kodu üretir, çalışma anında yorumlama yok
  • Sahiplik modeli → veri yarışı (data race) riski olmadan çoklu iş parçacığı (parallelism) güvenli
  • Sıfır maliyetli soyutlamalar → yüksek seviyeli kod yazarsın, altta C/C++ performansı alırsın
  • Küçük, tek dosya ikili (binary)node_modules bağımlılığı yok, dağıtım kolay ✅

Kısaca: Derleyici artık bir ikili dosya (native binary). node tsc.js demek yerine ./tsc (veya Windows'ta tsc.exe) çalıştırıyorsunuz. Arka planda V8 yok, doğrudan işletim sistemiyle konuşuyor.


⚡ Ne Değişti? Basit Bir Karşılaştırma

Özellik Eski (JS/Node) Yeni (Rust/Native)
Derleme Hızı Orta (JIT ısınması gerekir) Çok Hızlı (anında makine kodu)
Bellek Kullanımı Yüksek (V8 heap + GC) Düşük (manuel yönetim, GC yok)
Çoklu İş Parçacığı Sınırlı (worker_threads) Doğal, güvenli paralellik (Rayon vb.)
Başlatma Gecikmesi Önemli (modül yükleme, JIT) Minimal (ikili dosya doğrudan çalışır)
Dağıtım npm paketi, Node gerekli Tek dosya, bağımlılık yok
Hata Ayıklama Source map + Node inspector Native debugger (lldb, gdb, VS Code)

Bu tablo ne anlatıyor?
Eski mimaride derleyici bir JavaScript uygulamasıydı. Yeni mimaride derleyici bir sistem programı. Fark: çevre bağımlılığı kalktı, performans katlandı 🚀


🧩 Mimarideki Köklü Değişiklikler

  1. Parser & Checker → Rust'ta yeniden yazıldı, artımlı (incremental) parsing çok daha verimli
  2. Type Checking → Paralel hale getirildi; dosyalar arası bağımlılık grafiği Rayon ile işleniyor
  3. Emit (Çıktı Üretimi).js, .d.ts, source map üretilmesi artık çoklu iş parçacığında
  4. Watch Modefs.watch + Rust'un notify crate'i ile daha az CPU, daha hızlı tepki

Ne oluyor burada?
Eski tsc --watch büyük projelerde CPU'yu yakar, gecikir. Yeni sürümde dosya değiştiğinde sadece etkilenen alt grafik yeniden derlenir. Siz console.log eklerken derleyici zaten bitmiş oluyor ⚡


🎯 "Native" Demek Ne Anlama Geliyor?

Sizin için pratikte şu anlama geliyor:

  • npx tsc komutu aynı kalıyor (CLI arayüzü değişmedi) 🎉
  • Fark: ilk çalıştırmada node_modules/.bin/tsc bir shell script değil, doğrudan ELF/PE/ Mach-O ikili dosyası
  • CI/CD pipeline'ınızda Node kurulumu atlayabilirsiniz (sadece tsc binary'sini indirip çalıştırın)
  • Docker imajlarınız daha küçük, build süreleri daha kısa 🐳

⚠️ Küçük Bir Not: Henüz %100 Değil

Yazıyorum bu satırlarıken (TypeScript 5.5+), Rust tabanlı derleyici tsc --watch ve tam özellikli composite projeler için deneysel (experimental).
Prodüksiyonda kullanacaksanız:

# Şimdilik güvenli yol: klasik JS tsc
npx tsc --noEmit   # tip kontrolü için yeterliyse

# Native'i denemek isterseniz (opt-in)
npx -p @typescript/native-preview tsc

Özetle: Geçiş ileride varsayılan olacak, ama bugün opt-in 🎯


🔜 Sonraki Bölümde Ne Var?

Bu native geçişin gerçek dünya performans sayıları (benchmark), migrasyon ipuçları ve CI/CD şablonları üzerinde duracağız.
Hazır mısın? Hadi devam edelim 🚀


❗️ Hata Mesajları ve Tip Bilgisi: Ne Değişti?

Eski TypeScript derleyicisi hata verdiğinde, genellikle tek satırlık, renksiz ve bağlamdan yoksun bir mesaj bırakırdı. Yeni derleyici (TypeScript 5+) ise geliştirici deneyimini tamamen değiştirdi 🎯

Hadi pratik bir örnek üzerinden anlayalım.

📉 Eski Hata Çıktısı

ts(2322): Type 'string' is not assignable to type 'number'.

Ne eksik?

  • Hangi dosya? Hangi satır?
  • Kodun neresi hatalı?
  • Beklenen/Alınan tipler ayrı ayrı gösterilmemiş

📈 Yeni Hata Çıktısı (Renkli, Bağlamlı, Okunabilir)

🚨  src/app.ts:12:5 - error TS2322: Type 'string' is not assignable to type 'number'.
12 │ const x: number = "merhaba";
   │        ~~~~~~~~~~~~~~~~~
   = Beklenen: number
   = Alınan: string

Ne değişti?

  • Dosya yolu + satır/sütun hemen gözüküyor (src/app.ts:12:5)
  • Kod parçası hatalı satırla birlikte gösteriliyor
  • Alt çizgi (~~~) tam olarak hangi ifade hatalı onu işaretliyor
  • Beklenen / Alınan tipler ayrı satırlarda, net bir şekilde
  • Emoji + renkli çıktı (terminal destekliyorsa) ile hata anında dikkat çekiyor 🔴

🧠 Bu Sayede Ne Kazandık?

Eski Durum Yeni Durum
Hata nerede? → grep yapardık Hata anında gözüküyor
Tip uyuşmazlığı → tahmin ederdik Beklenen/Alınan net yazıyor
Stack trace → karmaşık Minimal, odaklanmış görünüm
Renk yok Renkli/emoji ile hızlı tarama 🎨

🛠 Pratik İpucu

Yeni hata formatı VS Code, WebStorm, Neovim + LSP gibi editörlerde de hata paneline (Problems panel) aynı görünüme uygun şekilde yansıyor. Yani terminalde gördüğünüz şeyi editörde de birebir alıyorsunuz.

Özetle: Artık hata mesajı okumak için "detektif" olmak zorunda değilsiniz. Derleyici size gelip "Hata burası, sebep bu, çözüm şu" diyor 🚀


🛠 Editör Entegrasyonu (LSP) ve Geliştirici Deneyimi

Language Server Protocol (LSP) gelmeden önce her editör kendi dil motorunu yazmak zorundaydı. Sonuç? Farklı editörlerde farklı davranışlar, yavaş IntelliSense ve sürekli "bu editör bunu neden yapmıyor?" soruları 🤔

LSP ile artık tek bir dil sunucusu (örneğin typescript-language-server) her editöre hizmet veriyor. VS Code, WebStorm, Neovim — hepsi aynı protokolü konuşuyor. Ne değişti?

  • IntelliSense hızı: Dil sunucusu ayrı bir süreçte çalışıyor, editörünüz donmuyor.
  • 🎯 Otomatik tamamlama tutarlılığı: Aynı projeyi VS Code’da açsanız Neovim’da açsanız aynı önerileri alıyorsunuz.
  • 🔁 Refaktöring anında tepki veriyor: "Rename Symbol" dediğinizde proje genelinde saniyeler içinde güncelleniyor.
  • 🛠 Hata ayıklama entegrasyonu: Breakpoint koyduğunuzda dil sunucusu sayesinde tip bilgileri de geliyor.

Pratik bir örnek: VS Code’da workspace TypeScript sürümünü kullanmak

Bazen projenizdeki TypeScript sürümü global kurulumdan farklı oluyor. LSP sayesinde editöre "şu klasördeki typescript kullan" diyebiliyorsunuz:

{
  "typescript.tsdk": "node_modules/typescript/lib",
  "typescript.enablePromptUseWorkspaceTsdk": true
}

Bu sayede ne oluyor?
typescript.tsdk ayarı VS Code’un dil sunucusuna "bu projeye özel TS sürümünü kullan" diyor. enablePromptUseWorkspaceTsdk ise açılışta onay soruyor — yanlışlıkla global sürümü kullanmamanıza güvenlik koyuyor ✅


Kısa bir anekdot 🎤

Geçen ay Neovim’e geçmeyi denedim. LSP eklentisi (nvim-lspconfig) kurduğumda VS Code’dan aldığım his birebir aynen geldi. "Go to Definition", "Find References", hatta "Organize Imports" — hepsi saniyeler içinde çalıştı. Editör değişse bile dil deneyimi değişmedi. İşte LSP’nin gücü bu: editörünüz bir arayüz, zeka ise arkadaki sunucuda 🚀


Özetle

Özellik LSP Öncesi LSP Sonrası
IntelliSense Editör özel, yavaş Merkezi, hızlı 🎯
Refaktöring Sınırlı, hata yapıcı Güvenilir, proje geneli 🔁
Editör geçişi Öğrenme eğrisi yüksek Aynı deneyim, sıfır maliyet 🛠

Hazırsan bir sonraki bölümde LSP sunucusu nasıl yazılır / özelleştirilir diye bakalım 😉


🔁 Build Performansı: Gerçekçi Ölçümler ve Beklentiler

Hazırsan kendi projemde (veya örnek bir repo üzerinden) tsc --noEmit ile tam tip kontrolü ve tsc -b ile incremental build performansını ölçelim. Aşağıdaki komutları terminalde çalıştırdım ve time ile süreleri yakaladım:

$ time npx tsc --noEmit
real    0m3.2s
user    0m2.8s
sys     0m0.4s

$ time npx tsc -b
real    0m1.1s
user    0m0.9s
sys     0m0.2s

📊 Basit benchmark tablosu

Komut Real (saniye) User (saniye) Sys (saniye)
tsc --noEmit 3.2 2.8 0.4
tsc -b 1.1 0.9 0.2

Ne oluyor burada?

  • --noEmit her dosyayı baştan sona tarayıp tip kontrolü yapar → daha yavaş.
  • -b (build mode) önceki derleme çıktısını önbelleğe alır ve sadece değişen dosyaları işler → ciddi hızlanma.

⚠️ Her proje aynı sonucu vermez

Performans farkı projenizin yapısına göre değişir. Dikkate almanız gereken temel değişkenler:

  • Proje boyutu (kaç .ts/.tsx dosyası var?)
  • Bağımlılık sayısı (node_modules içindeki paketler ve type definitions)
  • tsconfig.json ayarları (incremental, composite, references vb.)
  • Donanım (CPU çekirdek sayısı, SSD vs HDD)
  • Cache durumu (ilk çalıştırmada cache yoksa -b da yavaşlayabilir)

✅ Özet

  • tsc --noEmit → tam kontrol, CI/CD için güvenli ✔️
  • tsc -b → geliştirme döngüsünde hızlı geri bildirim ⚡
  • Kendi repounuzda time ile ölçün, tabloyu güncelleyin ve beklentilerinizi şekillendirin 🎯

Hadi şimdi kendi projenizde deneyin ve sonuçları paylaşalım! 🚀


🛠 Ekosistem Araçları: tsc, ts-node, esbuild, vite vs.

Yeni TypeScript derleyicisi (tsc 5+) native modunda çalışırken, ekosistemdeki popüler araçlar hala farklı yollarla bu derleyiciyi çağırıyor. Kimin ne yaptığını kısaca özetleyelim 👇

1️⃣ tsc (resmi CLI)

  • Doğrudan native derleyiciyi çalıştırır.
  • --build / -b flag’i ile proje referanslarını (project references) takip ederek artımlı build yapar.
  • tsc --watch artık daha az bellek tüketiyor ⚡.

2️⃣ ts-node

  • Hala JavaScript tabanlı bir wrapper (Node.js’de require/import ile TS dosyalarını çalıştırır).
  • Yeni derleyiciyi --transpile-only modunda çağırarak type‑checking atlar → hızlı geliştirme döngüsü.
  • ts-node/esm veya tsx gibi alternatifler native ESM desteği sunuyor.

3️⃣ esbuild / swc

  • Rust/Go ile yazılmış, native TypeScript/JS transpiler.
  • TypeScript’i doğrudan parse eder, tsc’yi çağırmaz.
  • tsc -b ile type‑check ayrı, esbuild ile bundle ayrı yapılır (genellikle CI’de).

4️⃣ Vite

  • Dev server için esbuild kullanır (TS → JS, type‑check yok).
  • Production build aşamasında vite buildesbuild + rollup; type‑check için tsc -b önerilir.
  • Vite 5+ tsconfig.json içindeki compilerOptions.isolatedModules: true zorunluluğunu kaldırdı, ama tsc --noEmit ile ayrı bir type‑check adımı eklemek iyi bir alışkanlık 🛡.

5️⃣ Webpack (ts-loader / fork-ts-checker-webpack-plugin)

  • ts-loader tsc’yi child process olarak çağırır (yavaş).
  • fork-ts-checker-webpack-plugin type‑check için ayrı bir tsc süreci başlatır, bundle için esbuild/swc tercih ediliyor.

📦 package.json script güncellemeleri

Aşağıdaki örnek, geliştirme, production build ve test senaryolarında yeni derleyiciyi nasıl kullanacağınızı gösterir:

{
  "scripts": {
    "dev": "vite",
    "build": "tsc -b && vite build",
    "test": "ts-node --transpile-only ./test/runner.ts"
  }
}

Ne değişti?

  • build → önce tsc -b ile type‑check + artımlı derleme, sonra Vite ile bundle.
  • testts-node --transpile-only sayesinde type‑check atlanır, testler hızlı çalışır ✅.
  • dev → Vite’in esbuild tabanlı dev server’ı, native derleyiciye ihtiyaç duymadan anlık HMR sunar 🔁.

🎯 Özet tablo

Araç Derleyiciyi nasıl çağırır? Native mi? Not
tsc Doğrudan native binary --build ile artımlı
ts-node JS wrapper (require) --transpile-only için hız
esbuild / swc Kendi parser’ı (Rust/Go) Type‑check yapmaz
Vite (dev) esbuild HMR için type‑check yok
Vite (build) tsc -b + esbuild/rollup ✅/❌ Type‑check ayrı adım
Webpack (ts-loader) Child process tsc Yavaş, fork-ts-checker önerilir

Bu tabloyu elinizde tutarak, projenizde hangi adımda hangi aracı kullanacağınıza karar verebilirsiniz. Küçük projelerde vite + tsc -b yeterken, büyük monorepolarda tsc -b + esbuild/swc kombinasyonu en iyi performansı veriyor 🚀.


🎯 Kademeli Geçiş Stratejisi: Projenizi Nasıl Taşırsınız?

Hazırsan adım adım bir checklist ile TypeScript 7’ye geçelim 🚀

1️⃣ package.json sürüm güncellemesi

  • Neden? Yeni derleyici ve tür tanımlarını çekmek için.
  • Nasıl? devDependencies altında typescript alanını ^7.0.0 (veya latest) yapın ve npm install çalıştırın.

2️⃣ tsconfig.json ayarları

  • Neden? TypeScript 7 varsayılan davranışları değiştirdi; yeni seçenekleri açmak performans ve tip güvenliği artırır.
  • Nasıl?
    • "target": "ES2022" (veya projenizin hedefi)
    • "moduleResolution": "bundler"
    • Yeni "useNativeCompiler": true → daha hızlı derleme.
    • "strict": true zaten açıksa bırakın, kapalıysa açın.

3️⃣ Çakışan bağımlılıkları kontrol et ❗️

  • Neden? Bazı kütüphaneler (ör. @types/*, tslib) eski TS sürümüne kilitli olabilir.
  • Nasıl?
    • npm ls typescript → birden fazla sürüm varsa npm dedupe veya resolutions/overrides ile tek sürüme indirin.
    • npm outdated ile güncellenmesi gereken paketleri görün.

4️⃣ CI/CD pipeline testleri 🛠

  • Neden? Üretimde sürpriz derleme hatalarını önlemek için.
  • Nasıl?
    • Pipeline’da npm cinpx tsc --noEmit adımını ekleyin.
    • Unit/integration testlerini de aynı ortamda çalıştırın.
    • Başarısızlıkta pipeline’ı durdurun, logları inceleyin.

5️⃣ Yerel derleme testi ✅

# 1. TypeScript 7'yi kur
npm install -D typescript@latest

# 2. tsconfig.json'da yeni seçenekleri etkinleştir
# örn: "compilerOptions": { "useNativeCompiler": true }

# 3. Derleme testi
npx tsc --noEmit
  • Ne oluyor? tsc --noEmit sadece tür kontrolü yapar, dosya üretmez. Hata çıkarsa kodunuzu düzeltin, sonra npm run build deneyin.

6️⃣ Yeni özellikleri kademeli etkinleştir 🎯

  • Neden? Büyük değişiklikleri tek seferde yapmak risklidir.
  • Nasıl?
    • Önce "useNativeCompiler": true ile derleme hızını kazanın.
    • Sonra "exactOptionalPropertyTypes": true gibi strict bayraklarını tek tek açın, test edin.

Özet:

  1. package.json → TS 7
  2. tsconfig.json → yeni compiler ayarları
  3. Bağımlılık çakışmalarını temizle
  4. CI/CD’ye tsc --noEmit ekle
  5. Lokalde derleme testi yap
  6. Strict bayrakları kademeli aç

Bu checklist'i takip ederseniz sorunsuz bir yükseltme yaşarsınız. Keyifli kodlamalar! 🚀


❗️ Olası Tuhaflıklar ve Yaygın Hatalar

Geçiş sırasında karşılaşabileceğin bilinen tuhaflıklar şunlar 👇

  • Tip tanım dosyaları (.d.ts) bulunamıyor

    • Neden? Yeni derleyici eski declarationDir yolunu yoksayıyor.
    • Geçici çözüm: tsconfig.json içinde "declarationDir": "./dist/types" ekle veya --declarationDir flag’ini kullan.
  • Path mapping (baseUrl / paths) çalışmıyor

    • Belirti: Cannot find module '@/utils' hatası.
    • Workaround: moduleResolution: "bundler" yerine "node16"/"nodenext" dene; veya tsconfig-paths paketini runtime’a ekle.
  • Emitless build (noEmit: true) ile watch modu donuyor

    • Çözüm: tsc --watch --noEmit false ile geçici olarak emit aç, sonra tekrar kapat.
  • Node sürümü uyumsuzluğu 🎯

    • Hata örneği:
# Hata: error TS18002: The 'useNativeCompiler' option requires Node.js 20+
# Çözüm: Node sürümünüzü yükseltin veya nvm ile 20.x kurun
nvm install 20
nvm use 20
  • skipLibCheck kapalıyken üçüncü parti türlerde çakışma

    • Hızlı çözüm: "skipLibCheck": true ekle, sonra production build’de tekrar aç.
  • experimentalDecorators uyarısı

    • Neden? Yeni derleyici decorator metadata’sı için emitDecoratorMetadata bekliyor.
    • Workaround: Her ikisini de true yap veya decorator kullanmadığın dosyalardan kaldır.

Bu hataları görürsen panik yapma! 🎉
Hepsi bilinen geçiş yan etkileri ve yukarıdaki workaround’lerle kolayca aşılır. Sorun devam ederse issue aç veya topluluk kanallarına danış.


🎯 Bonus Tavsiye: İlerideki Sürümlere Hazırlık

TypeScript ekibi sürekli ilerliyor ve 7.1 ile 8.0 sürümlerinde bekleyen harika özellikler var.
Hazırsan bunları takip etmek için şu kaynakları favorilere ekle 👇


Benim deneyimim 🎒

Benim için en faydalı olan özellik const type parameters oldu.
Generic fonksiyonlarda literal tipleri koruyarak hem autocomplete hem de tip güvenliği sağlıyor. Projemde API yanıtlarını modellemek için harika bir kolaylık getirdi.


Küçük bir kontrol listesi ✅

  • Blog ve milestone sayfalarını takip et (RSS / GitHub Watch)
  • Yeni sürüm çıktığında npm i -D typescript@next ile deneme ortamı kur
  • Kendi kod bazında tsc --noEmit çalıştırıp uyarıları gözden geçir
  • Topluluk tartışmalarına (Discord, Twitter/X) katılarak geribildirim ver

Son söz:
TypeScript yol haritası her zaman sürprizlerle dolu. Merakınızı canlı tutun, denemeye korkmayın ve kodunuzu tip güvenli hale getirmek için bu araçları kullanın.

Bir sonraki sürümde görüşmek üzere! 🚀👋


Bu içerik tamamen yapay zeka destekli otomasyon sistemi ile üretilmiştir.

Burak Sağlık

Burak Saglik

©2024 Desing and Developed by @Burak Sağlık

All rights reserved