8 puan yazan GN⁺ 2026-03-25 | 3 yorum | WhatsApp'ta paylaş
  • JavaScript tabanlı mevcut kod tabanının son sürümü ve Go ile yazılmış yerel port olan TypeScript 7.0’a geçişi hazırlayan bir köprü sürüm
  • this kullanmayan fonksiyonlarda bağlam duyarlılığının gevşetilmesi, #/ ile başlayan subpath imports desteği gibi tür çıkarımı ve modül çözümleme iyileştirmeleri içeriyor
  • strict varsayılanının true olması, target varsayılanının es2025, types varsayılanının [] olması gibi derleyici seçeneklerinin varsayılanlarında kapsamlı modernizasyon
  • ES5 hedefi, AMD/UMD/SystemJS modülleri, --baseUrl, --moduleResolution node10 gibi çok sayıda eski seçeneğin kullanımdan kaldırılması (deprecation)
  • Temporal API, Map’in getOrInsert/getOrInsertComputed, RegExp.escape gibi en yeni ECMAScript Stage 4 önerileri için tür desteği eklendi

TypeScript 6.0’ın konumu

  • Mevcut JavaScript kod tabanı temelli son sürüm; TypeScript 7.0’a (Go yerel portu) geçiş için bir köprü görevi görüyor
  • TypeScript 7.0, yerel kod ve paylaşımlı bellekli çok iş parçacıklılıktan yararlanıyor ve halihazırda tamamlanmaya çok yakın
  • 6.0’daki değişikliklerin çoğu, 7.0 benimsenmesini uyumlu hale getirmek ve hazırlamak için yapıldı
  • TypeScript 7.0, VS Code eklentisi veya npm paketi ile önceden denenebiliyor

Beta ve RC sonrası değişiklikler

  • Generic çağrılarda, özellikle generic JSX ifadelerinde fonksiyon ifadelerinin tür denetimi ayarlandı — mevcut kodda daha fazla hatayı yakalıyor, ancak bazı generic çağrılarda açık tür argümanları gerekebilir
  • import() çağrılarında da import assertion sözdiziminin (assert) kullanımdan kaldırılması genişletildi
  • DOM türleri güncellendi — en yeni web standartları yansıtıldı, Temporal API ile ilgili ayarlamalar da dahil

this kullanmayan fonksiyonlarda bağlam duyarlılığının gevşetilmesi

  • TypeScript, tür çıkarımı sırasında açık türü olmayan parametrelere sahip fonksiyonları bağlamsal olarak duyarlı fonksiyonlar (contextually sensitive function) olarak sınıflandırır ve çıkarım sıralamasında daha sonraya bırakır
  • Method syntax ile yazılan fonksiyonlarda örtük bir this parametresi bulunduğundan, ok fonksiyonlarından farklı olarak her zaman bağlam duyarlı sayılıyordu
    • Bu nedenle nesne literal’i içindeki method sırasına göre tür çıkarımının başarısız olduğu durumlar oluşabiliyordu
  • TypeScript 6.0’da this gerçekten kullanılmayan fonksiyonlar artık bağlam duyarlı kabul edilmiyor
    • Bu fonksiyonlar tür çıkarımında daha yüksek öncelik alıyor ve böylece method sırasından bağımsız olarak doğru çıkarım yapılıyor
  • Mateusz Burzyński’nin katkısıyla hayata geçirildi

#/ ile başlayan Subpath Imports desteği

  • Node.js’in subpath imports özelliği, paket içi modüller için takma adları package.json içindeki imports alanıyla tanımlamaya yarıyor
  • Önceden # sonrasında mutlaka bir karakter gerektiği için #/ ile başlayan yollar kullanılamıyordu
    • Bu da paketleyicilerde @/ öneki geleneğine alışkın geliştiriciler için kafa karışıklığı yaratıyordu
  • Node.js kısa süre önce #/ ile başlayan subpath import’ları desteklemeye başladı
    • "#/*": "./dist/*" biçiminde daha sade eşlemeler mümkün
  • TypeScript 6.0 bunu --moduleResolution nodenext ve bundler seçeneklerinde destekliyor
  • magic-akari’nin katkısıyla hayata geçirildi

--moduleResolution bundler ile --module commonjs kombinasyonuna izin verilmesi

  • Önceden --moduleResolution bundler yalnızca --module esnext veya --module preserve ile kullanılabiliyordu
  • --moduleResolution node(node10) kullanımdan kaldırıldığı için, bu yeni kombinasyon birçok proje için en uygun yükseltme yolu
  • Uzun vadede ise --module preserve + --moduleResolution bundler ya da --module nodenext yönüne geçiş öneriliyor

--stableTypeOrdering bayrağı

  • TypeScript içinde türlere atanan type ID’ler işleme sırasına göre belirlenir ve union türleri bunlara göre sıralanır
    • Bildirim sırasına bağlı olarak declaration emit çıktısının değişmesine yol açan öngörülemez durumlar oluşabilir
  • TypeScript 7.0, paralel tür denetimi getirdiğinden, deterministik olmayan ID atama sorununu çözmek için içerik tabanlı deterministik bir sıralama algoritması kullanıyor
    • Örneğin 100 | 500 her zaman aynı sırayla yazdırılır
  • 6.0’da --stableTypeOrdering bayrağı etkinleştirilirse davranış 7.0’daki tür sıralamasıyla eşleşir ve iki kod tabanı arasındaki fark azalır
    • Tür denetiminde %25’e kadar performans kaybı olabilir
    • Çıkarım farklılıklarından kaynaklanan tür hataları, açık tür argümanları veya değişken anotasyonları eklenerek çözülebilir
  • Bu bayrak yalnızca 6.0’dan 7.0’a geçişte tanılama amaçlı düşünülmüş; uzun süreli kullanımı önerilmiyor

es2025 seçeneği (target ve lib)

  • ES2025 yeni JavaScript dil özellikleri getirmiyor, ancak yerleşik API türleri (ör. RegExp.escape) ekliyor
  • Daha önce esnext içinde yer alan Promise.try, Iterator method’ları ve Set method’ları es2025 içine taşındı
  • Kenta Moriuchi’nin katkısıyla hayata geçirildi

Temporal API tür desteği

  • Stage 4’e ulaşan Temporal önerisinin yerleşik türleri TypeScript 6.0’a dahil edildi
  • --target esnext veya "lib": ["esnext"] (ya da daha ayrıntılı esnext.temporal) ile kullanılabiliyor
  • Temporal.Now.instant().subtract(), .add() gibi API’ler tür güvenli biçimde kullanılabiliyor
  • Birden fazla çalışma zamanında zaten mevcut ve Stage 4 ile birlikte resmî JavaScript dilinin bir parçası haline geldi
  • Renegade334’ün katkısıyla hayata geçirildi

Map’in "upsert" method’ları için tür desteği (getOrInsert / getOrInsertComputed)

  • Map’te anahtarın varlığını kontrol edip yoksa varsayılan değer atayan tekrar eden kalıbı sadeleştiriyor
  • ECMAScript’in "upsert" önerisi Stage 4’e ulaştı ve Map ile WeakMap için iki yeni method ekledi
    • getOrInsert: Anahtar yoksa belirtilen varsayılan değeri ekler ve döndürür
    • getOrInsertComputed: Varsayılan değerin oluşturma maliyeti yüksekse geri çağrıyla tembel hesaplama yapar
      • Geri çağrı, anahtarı argüman olarak alır; böylece anahtara göre varsayılan değer üretmek için de kullanılabilir
  • esnext lib’e eklendiği için TypeScript 6.0’da hemen kullanılabiliyor
  • Renegade334’ün katkısıyla hayata geçirildi

RegExp.escape

  • RegExp içindeki özel karakterleri kaçışlayan RegExp.escape fonksiyonu Stage 4’e ulaştı
  • es2025 lib’ine dahil edildiği için TypeScript 6.0’da kullanılabiliyor
  • Kenta Moriuchi’nin katkısıyla hayata geçirildi

dom lib’ine dom.iterable ve dom.asynciterable entegrasyonu

  • Önceden NodeList, HTMLCollection gibi yapılarda yineleme kullanmak için "lib": ["dom", "dom.iterable"] belirtmek gerekiyordu
  • TypeScript 6.0’da lib.dom.iterable.d.ts ve lib.dom.asynciterable.d.ts içerikleri tamamen lib.dom.d.ts içine entegre edildi
    • dom.iterable ve dom.asynciterable hâlâ referans verilebilir, ancak artık boş dosyalar
  • Tüm büyük modern tarayıcılar bu özellikleri desteklediğinden, sık yaşanan bir kafa karışıklığını gideren kullanışlı bir iyileştirme

Başlıca varsayılan değişiklikler

  • strict varsayılanı true: Yeni projelerin çoğu strict mod ister; daha önce false varsayımına dayanan projelerin açıkça "strict": false ayarlaması yapması gerekir
  • module varsayılanı esnext: ESM’in baskın modül formatı haline gelmesini yansıtıyor
  • target varsayılanı en güncel ES sürümü (şu anda es2025): Evergreen çalışma zamanlarının yaygınlaşması sayesinde eski sürümlere transpile etmek çoğunlukla gereksiz
  • noUncheckedSideEffectImports varsayılanı true: Yalnızca side effect için yapılan import’lardaki yazım hatalarını yakalamaya yardımcı olur
  • libReplacement varsayılanı false: Gereksiz modül çözümleme hatalarını ve izlenen hedef sayısını azaltarak varsayılan performansı iyileştirir

rootDir varsayılanının . olarak değişmesi

  • Önceden belirtilmediğinde tüm declaration dışı girdi dosyalarının ortak dizini çıkarılarak belirleniyordu
    • Bu da bir dosyanın projeye ait olup olmadığını anlamak için ilgili projenin yüklenip ayrıştırılmasını gerektiriyordu
  • TypeScript 6.0’da varsayılan artık tsconfig.json dosyasının bulunduğu dizin olarak sabitlendi
  • Kaynak dosyalar tsconfig.json’dan daha derin bir konumdaysa "rootDir": "./src" gibi açık ayar yapmak gerekiyor
    • Aksi halde ./dist/src/index.js gibi istenmeyen çıktı yapıları oluşabilir

types varsayılanının [] olarak değişmesi

  • Önceden node_modules/@types içindeki tüm paketler otomatik dahil edildiği için derleme süresinde ciddi ek yük oluşuyordu
    • Tipik depolarda yüzlerce @types paketi dolaylı olarak dahil olabiliyordu
  • TypeScript 6.0’da varsayılan [] (boş dizi) oldu; böylece gereksiz declaration dosyalarının yüklenmesi önleniyor
  • Gerçek dünyada derleme süresinde %20–50 iyileşme örnekleri görüldü
  • Çoğu projede "types": ["node"] veya "types": ["node", "jest"] gibi açık ayarlar gerekecek
    • "types": ["*"] ile önceki davranış geri getirilebilir

Kullanımdan kaldırılanlar (Deprecation)

target: es5 kullanımdan kaldırıldı

  • ES5 hedefinin, IE’nin emekliye ayrılması ve evergreen tarayıcıların yaygınlaşmasıyla artık neredeyse hiçbir kullanım alanı kalmadı
  • Asgari hedef ES2015 oldu; ES5 çıktısı gerekiyorsa harici bir derleyici kullanılması öneriliyor

--downlevelIteration kullanımdan kaldırıldı

  • Yalnızca ES5 emit üzerinde etkiliydi; bu yüzden ES5 hedefinin kaldırılmasıyla amacı da ortadan kalktı

--moduleResolution node(node10) kullanımdan kaldırıldı

  • Node.js 10’un modül çözümleme algoritmasını yansıtıyordu ve güncel Node.js davranışıyla artık uyuşmuyor
  • nodenext (doğrudan Node.js hedefleme) veya bundler (paketleyici/Bun kullanımı) yönüne geçiş öneriliyor

AMD, UMD, SystemJS modül değerleri kullanımdan kaldırıldı

  • --module amd, --module umd, --module systemjs, --module none artık desteklenmiyor
  • ESM hem tarayıcıda hem Node.js’te yaygın olarak desteklendiği için paketleyici ya da ESM hedefine geçmek gerekiyor

--baseUrl kullanımdan kaldırıldı

  • Çoğunlukla paths için önek olarak kullanılıyordu, ancak modül çözümlemede arama kökü olarak da davrandığı için istenmeyen yol çözümleme sorunları yaratabiliyordu
  • Geçiş için baseUrl kaldırılıp önek doğrudan paths girdilerine eklenmeli
    • Örnek: "@app/*": ["app/*"]"@app/*": ["./src/app/*"]

--moduleResolution classic kullanımdan kaldırıldı

  • TypeScript’in özgün modül çözümleme algoritmasıydı; bugün tüm pratik kullanım senaryoları nodenext veya bundler ile karşılanabiliyor

esModuleInterop false ve allowSyntheticDefaultImports false kullanımdan kaldırıldı

  • Bu iki seçeneğin false olması artık mümkün değil; böylece güvenli birlikte çalışabilirlik davranışı her zaman etkin olacak
  • import * as express from "express"import express from "express" şeklinde uyarlama gerekebilir

--alwaysStrict false kullanımdan kaldırıldı

  • Tüm kod artık JavaScript strict mode altında kabul ediliyor; await, static, private gibi sözcükleri sıradan tanımlayıcı olarak kullanan kodlarda isim değişikliği gerekebilir

outFile kullanımdan kaldırıldı

  • Birden fazla girdi dosyasını tek dosyada birleştirme işleviydi; artık Webpack, Rollup, esbuild, Vite gibi harici paketleyicilerle yer değiştiriyor
  • Bu karar, TypeScript’in çekirdek rolü olan tür denetimi ve declaration emit’e odaklanmak için alındı

Eski module sözdizimi (namespace bildirimi) kullanımdan kaldırıldı

  • module Foo { ... } sözdizimi kesin olarak kaldırıldı; yerine namespace Foo { ... } kullanılmalı
  • declare module "some-module" { ... } biçimindeki ambient module bildirimleri ise desteklenmeye devam ediyor
  • Amaç, ECMAScript’in module block önerisiyle çakışmayı önlemek

Import asserts anahtar sözcüğü kullanımdan kaldırıldı

  • import ... asserts { type: "json" }import ... with { type: "json" } olarak değiştirilmeli
  • Bunun nedeni, import assertions önerisinin import attributes önerisine (with anahtar sözcüğü) dönüşmesi

no-default-lib yönergesi kullanımdan kaldırıldı

  • /// <reference no-default-lib="true"/> artık desteklenmiyor; onun yerine --noLib veya --libReplacement öneriliyor

tsconfig.json varsa komut satırında dosya belirtme hatası

  • tsc foo.ts çalıştırıldığında aynı dizinde tsconfig.json varsa hata oluşacak
  • Bunu açıkça yok saymak için --ignoreConfig bayrağı kullanılabilir

TypeScript 7.0’a hazırlık

  • 6.0’da kullanımdan kaldırılan seçenekler "ignoreDeprecations": "6.0" ayarıyla hatasız kullanılmaya devam edebilir, ancak 7.0’da tamamen kaldırılacaklar
  • ts5to6 aracı ile baseUrl, rootDir gibi ayarlar otomatik olarak uyarlanabiliyor
  • TypeScript 7.0’ın birkaç ay içinde yayımlanması planlanıyor ve Microsoft içinde ve dışında büyük kod tabanlarında şimdiden geniş ölçüde benimseniyor
  • Geri bildirim için native preview nightly build ve VS Code eklentisi öneriliyor

3 yorum

 
tsboard 2026-03-26

Tamamen Go tabanlı derleyiciye geçilecek zamanı dört gözle bekliyorum!

 
princox 2026-03-25

Ha? TypeScript ileride Go tabanlı native bir yapıya mı geçiyor?

 
helio 2026-03-25

Sadece derleyici.