TypeScript 5.0 ile 5.9 arasındaki on sürüm; standart dekoratörler, const tür parametreleri, using bildirimleri, NoInfer, çıkarılan tip yüklemleri (inferred type predicates), düzenli ifade denetimi, --erasableSyntaxOnly ve import defer gibi özellikler getirdi. Aşağıdaki tablo her sürümden resmî sürüm notlarında yer alan bir ila üç öne çıkan maddeyi listeliyor; ardından en çok işinize yarayacak olanları TypeScript 6.0 derleyicisiyle denenmiş örneklerle anlatıyoruz.
Tablo bir sürümün tüm içeriği değildir; her sürümde ayrıca editör iyileştirmeleri, performans çalışmaları ve davranış değişiklikleri bulunur. Projenizi yükseltirken ilgili sürümün "Breaking Changes" veya "Notable Behavioral Changes" bölümünü mutlaka okuyun. 5.x serisinden sonra gelen ve birçok varsayılanı değiştiren sürüm için TypeScript 6.0 yenilikleri yazısına bakın.
5.0 - 5.9 sürüm özeti
| Sürüm | Öne çıkanlar (sürüm notlarından) |
|---|---|
| 5.0 | Standart ECMAScript dekoratörleri; const tür parametreleri; --moduleResolution bundler ve --verbatimModuleSyntax |
| 5.1 | undefined döndüren fonksiyonlarda return zorunluluğunun kalkması; getter ve setter için birbirinden bağımsız tipler |
| 5.2 | using bildirimleri (Explicit Resource Management); dekoratör metadata; etiketli ve etiketsiz tuple öğelerinin karışabilmesi |
| 5.3 | Import attributes (with sözdizimi); switch (true) ile daraltma; boolean karşılaştırmalarında daraltma |
| 5.4 | Closure içinde son atamadan sonra korunan daraltma; NoInfer yardımcı tipi; Object.groupBy ve Map.groupBy tipleri |
| 5.5 | Çıkarılan tip yüklemleri; düzenli ifade sözdizimi denetimi; --isolatedDeclarations |
| 5.6 | Her zaman doğru veya nullish olan koşullara hata; iterator yardımcı metotları; --noUncheckedSideEffectImports |
| 5.7 | Hiç atanmamış değişken denetimi; --rewriteRelativeImportExtensions; --target es2024 ve --lib es2024 |
| 5.8 | return içindeki koşul dallarının ayrı ayrı denetlenmesi; --erasableSyntaxOnly; --module node18 |
| 5.9 | Sadeleştirilmiş tsc --init; import defer; --module node20 |
5.0: dekoratörler ve const tür parametreleri

5.0, ECMAScript standart sürecindeki dekoratörleri destekledi; eski experimentalDecorators modeli ayrı bir seçenek olarak kaldı. Ayrıntıları TypeScript dekoratörleri yazısında bulabilirsiniz. Aynı sürümün en pratik eklemelerinden biri, tür parametresinin önüne const yazarak çağıranın as const eklemesine gerek kalmadan dar (literal) tip çıkarımı yapmaktır:
function adlar<const T extends { adlar: readonly string[] }>(arg: T): T["adlar"] {
return arg.adlar;
}
const sonuc = adlar({ adlar: ["Ali", "Ece"] });
// sonuc: readonly ["Ali", "Ece"] (const olmadan string[] olurdu)5.0 ayrıca paketleyici kullanan projeler için --moduleResolution bundler ve importların çıktıda nasıl yazıldığını öngörülebilir kılan --verbatimModuleSyntax seçeneklerini getirdi. Bu iki seçeneğin günümüzdeki yeri için modül çözümleme yazısına bakın.
5.1 ve 5.2: undefined dönüşü ve using
5.1'den önce dönüş tipi undefined olarak yazılmış bir fonksiyonun en az bir return içermesi gerekiyordu; yalnızca void ve any dönüşlü fonksiyonlar return içermeden yazılabiliyordu. Sürüm notları bunun özellikle başkasının yazdığı, () => undefined bekleyen API'leri çağırırken kafa karıştırdığını anlatıyor. 5.1 ile aşağıdaki kod hatasız derlenir:
function bildir(): undefined {
// return yazmaya gerek yok (5.1 ve sonrası)
}
console.log(bildir()); // undefinedAynı sürüm, bir özelliğin get ve set erişimcilerine birbiriyle ilgisiz tipler verilebilmesini sağladı; 4.3'te gelen farklı tip desteğinin kısıtları gevşetildi.
5.2'nin en büyük eklemesi ECMAScript Explicit Resource Management önerisine dayanan using bildirimidir. Symbol.dispose adlı yerleşik sembolle bir temizlik metodu tanımlayan nesneyi using ile oluşturduğunuzda, kapsamdan hangi yolla çıkılırsa çıkılsın (erken return veya hata dahil) bu metot otomatik çağrılır. Böylece dosya kapatma veya geçici dosya silme gibi işler için try...finally blokları yazmanız gerekmez. Asenkron temizlik için await using ve Symbol.asyncDispose çifti vardır. Sınıf sözdizimi için class ve erişim belirleyiciler yazısına bakabilirsiniz.
5.3 ve 5.4: daha akıllı daraltma

5.3 ile switch (true) içindeki her case koşulu daraltma için kullanılıyor:
function tur(x: unknown) {
switch (true) {
case typeof x === "string":
return x.toUpperCase(); // x: string
case Array.isArray(x):
return x.length; // x: any[]
default:
return "bilinmiyor";
}
}
console.log(tur("ts"), tur([1, 2]), tur(5)); // TS 2 bilinmiyor5.4 ise bir değişkenin son atamasından sonra oluşturulan closure içinde daraltılmış tipin korunmasını sağladı. Aşağıdaki kod eskiden url.searchParams satırında hata veriyordu; 6.0 ile hatasız derlenir:
function getir(url: string | URL, adlar: string[]) {
if (typeof url === "string") {
url = new URL(url);
}
return adlar.map((ad) => {
url.searchParams.set("ad", ad); // url: URL
return url.toString();
});
}
console.log(getir("https://ornek.com/", ["a"])); // [ 'https://ornek.com/?ad=a' ]Aynı sürümdeki NoInfer<T> yardımcı tipi, bir parametrenin tür parametresi çıkarımına katılmasını engeller. Böylece varsayılan değer listede olmayan bir renk olamaz:
function lamba<C extends string>(renkler: C[], varsayilan?: NoInfer<C>) {}
lamba(["kirmizi", "sari", "yesil"], "yesil"); // tamam
lamba(["kirmizi", "sari", "yesil"], "mavi");
// TS2345: Argument of type '"mavi"' is not assignable to parameter of type
// '"kirmizi" | "sari" | "yesil" | undefined'.Daraltmanın tüm biçimleri narrowing ve type guard yazısında, diğer yardımcı tipler utility types yazısında anlatılıyor.
5.5: çıkarılan tip yüklemleri ve regex denetimi
5.5'ten önce filter içinde null kontrolü yapmak dizinin tipini daraltmazdı; x is number dönüş tipini elle yazmanız gerekirdi. Artık derleyici uygun fonksiyonlar için bu yüklemi kendisi çıkarıyor:
const karisik = [1, null, 2, undefined, 3];
const sayilar = karisik.filter((x) => x !== undefined && x !== null);
// sayilar: number[]
const toplam: number = sayilar.reduce((a, b) => a + b, 0);
console.log(toplam); // 6Aynı sürüm düzenli ifade değişmezlerinde temel sözdizimi denetimi de getirdi:
const desen = /@robot(\s+(lutfen|hemen)))? gorev/;
// TS1508: Unexpected ')'. Did you mean to escape it with backslash?5.6 ve 5.7: gözden kaçan hatalar
5.6, sonucu her zaman aynı olan koşulları hata olarak işaretler. Örneğin .test() çağrısı unutulmuş bir düzenli ifade her zaman doğrudur:
if (/0x[0-9a-f]/) {
console.log("her zaman");
}
// TS2872: This kind of expression is always truthy.5.6'da gelen --noUncheckedSideEffectImports seçeneği, bulunamayan yan etki importlarını (import "./stil.css" gibi) sessizce geçmek yerine bildirir; bu seçenek 6.0 ile varsayılan olarak açıldı. 5.7 ise iç içe fonksiyonlarda kullanılan ama hiç atanmayan değişkenleri yakalar:
function f() {
let sonuc: number;
function yazdir() {
console.log(sonuc);
// TS2454: Variable 'sonuc' is used before being assigned.
}
}5.8 ve 5.9: return denetimi, silinebilir sözdizimi ve tsc --init
5.8, return içindeki üçlü ifadenin her dalını fonksiyonun dönüş tipine karşı ayrı denetler. Eskiden any içeren bir birleşim tüm ifadeyi any yapıp hatayı gizliyordu:
declare const onbellek: Map<any, any>;
function urlAl(s: string): URL {
return onbellek.has(s) ? onbellek.get(s) : s;
// TS2322: Type 'string' is not assignable to type 'URL'.
}--erasableSyntaxOnly, Node.js'in tip silme (type stripping) moduyla uyum için çalışma zamanı anlamı olan TypeScript sözdizimini yasaklar: enum, çalışma zamanı kodu içeren namespace, sınıflardaki parametre özellikleri ve import = atamaları. Bu konuda enum ve alternatifleri ile TypeScript ve Node.js yazıları yardımcı olur.
5.9 ise tsc --init komutunun ürettiği tsconfig.json dosyasını sadeleştirdi: uzun yorum listesi yerine az sayıda, daha öneri niteliğinde ayar. Aynı sürüm modülü ancak bir dışa aktarımına ilk erişildiğinde çalıştıran import defer * as ozellik from "./ozellik.js" sözdizimini ve Node.js 20 davranışını sabit olarak modelleyen --module node20 seçeneğini ekledi.
Sürüm yükseltirken dikkat edilecekler

- Her sürümün sonundaki "Breaking Changes" veya "Notable Behavioral Changes" bölümünü okuyun; yeni denetimler eskiden derlenen kodda hata çıkarabilir.
- Daha dar tip çıkarımları (örneğin 5.5'teki tip yüklemleri) bazen değişkenlerin tipini değiştirir; testlerinizi tip denetimiyle birlikte çalıştırın.
- Bir seçenek yeni bir sürümde varsayılan oluyorsa (5.6'daki
noUncheckedSideEffectImportsgibi), önce kendi projenizde açıp sonuçlara bakın. - Atlamalı yükseltmede (örneğin 5.2'den 5.9'a) aradaki her sürümün notlarını sırayla okuyun.
Sık Sorulan Sorular
Hangi 5.x sürümünü kullanmalıyım?
Sürüm notları belirli bir 5.x sürümünü önermez. Yeni bir projede genellikle en güncel kararlı sürümle başlanır; mevcut projede ise yükseltmeyi sürüm notlarındaki kırılma değişikliklerini okuyarak adım adım yapmak güvenlidir.
Tuple etiketlerinde 5.2 ile ne değişti?
4.0'da gelen etiketli tuple öğelerinde, bir öğe etiketliyse hepsinin etiketli olması gerekiyordu. 5.2 bu kuralı kaldırdı; [ilk: string, number] artık geçerli. Ayrıntılar tuple ve readonly diziler yazısında.
using bildirimi ne işe yarar?
5.2 ile gelen using, kapsam bittiğinde nesnenin Symbol.dispose metodunu otomatik çağırır; dosya kapatma veya bağlantı bırakma gibi temizlik işleri için tasarlandı. ECMAScript Explicit Resource Management önerisine dayanır.
satisfies operatörü hangi sürümde geldi?
satisfies 4.9 ile geldi, yani 5.x serisinden önce. 5.0 ise JSDoc içinde @satisfies desteği ekledi. Kullanımı için satisfies operatörü yazısına bakın.
Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: TypeScript öğrenme rehberi · TypeScript 6.0 yenilikleri · Narrowing · Utility types · Dekoratörler · Tuple ve readonly diziler · TypeScript ileri seviye