TypeScript Dekoratörleri: Legacy'den TC39 Standardına Geçiş
TC39 standart dekoratörleri experimentalDecorators'tan köklü biçimde farklı. Parametre dekoratörleri kalktı, metadata sistemi değişti; geçiş rehberi kod örnekleriyle anlatılıyor.
TypeScript 5.0 ve sonrasında derleyici artık TC39 standart dekoratörlerini varsayılan olarak kullanıyor, ancak bu geçiş sanıldığı gibi basit bir bayrak değişimi değil. Legacy experimentalDecorators ile standart dekoratörler tamamen farklı imzalara sahip: eski sistemde sınıf, metod ve parametre dekoratörleri farklı argümanlar alırken, standart dekoratörler her zaman decorated değer ve bir context nesnesi alıyor. Prototip üzerinde doğrudan mutasyon yapan eski yaklaşım yerine, sınıf dekoratörleri artık yeni bir constructor döndürmeli veya context.addInitializer kullanmalı.
En kritik kırılma noktalarından biri metadata yönetimi. reflect-metadata polyfill'ine dayanan eski sistemin yerini, her decoration context'e özgü, global durumdan bağımsız context.metadata nesnesi alıyor. Bu değişiklik bundle boyutunu küçültüyor ve sınıflar arası metadata sızıntısını önlüyor, fakat Reflect.getMetadata çağrılarına dayanan mevcut kodun yeniden yazılmasını gerektiriyor. Parametre dekoratörleri ise TC39 standardından tamamen çıkarıldı; bağımlılık enjeksiyonu ve doğrulama gibi kalıplar artık metod veya constructor seviyesinde toplanan metadata ile yeniden kurgulanmak zorunda.
Üretim ekipleri için önerilen yaklaşım, mevcut çalışan kodu tamamen yeniden yazmak yerine yeni özellik eklerken kademeli geçiş yapmak. Koşullu export'lar ve type-only import'lar kullanılarak eski ve yeni dekoratör sistemleri aynı kod tabanında bir arada çalıştırılabiliyor, bu da derleyici bayrağının birden fazla sürüm boyunca kademeli olarak etkinleştirilmesine imkân tanıyor. Mühendisler için bu, teknik borç birikmeden önce migrasyon stratejisini planlamanın önemini vurguluyor.