Dekoratör Üst Verileri
Üst veri API'siyle üst veriler ekleyin ve okuyun.
Dekoratör Üst Verileri, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
Dekoratör Üst Veri API'si
Standartlaştırılmış dekoratörlerde yerleşik bir üst veri kanalı bulunur. Bağlam nesnesi, yazabileceğiniz bir metadata nesnesi sunar; sınıf da bunu daha sonra iyi bilinen Symbol.metadata anahtarının altında taşır.
context.metadata
Her dekoratör bağlamı, tanımlanmakta olan sınıf için tek bir metadata nesnesini paylaşır. Dekoratörler bu nesneye veri ekler; bu nesne sınıf meta verisine dönüşür.
function tag(label: string) {
return function (value: any, context: DecoratorContext) {
context.metadata[context.name] = label;
};
}Symbol.metadata Üzerinden Okuma
Sınıf tanımlandıktan sonra toplanan meta verilere SomeClass[Symbol.metadata] üzerinden erişilebilir.
class User {
@tag("identifier") id = 0;
@tag("display") name = "";
}
const meta = (User as any)[Symbol.metadata];
console.log(meta); // { id: "identifier", name: "display" }Paylaşılan Nesne Neden Önemlidir
Bir sınıftaki tüm dekoratörler aynı metadata nesnesine yazdığından, birçok dekoratörden gelen bilgileri sınıfı açıklayan tek ve tutarlı bir kayıtta biriktirebilirsiniz.
Yapılandırılmış Meta Verileri Saklama
Meta veri değerleri her yapıda olabilir. Yaygın bir yaklaşım, üye adıyla anahtarlanmış iç içe bir kayıt tutmaktır.
function column(type: string) {
return function (value: any, context: ClassFieldDecoratorContext) {
const md = context.metadata as any;
md.columns ??= {};
md.columns[context.name] = { type };
};
}Sınıf Düzeyinde Meta Veri
Bir sınıf dekoratörü de meta veri yazabilir; örneğin alan başına sütun bilgilerini tamamlayan bir tablo adı ekleyebilir.
function entity(table: string) {
return function (value: Function, context: ClassDecoratorContext) {
(context.metadata as any).table = table;
};
}
@entity("users")
class UserEntity {
@column("serial") id = 0;
@column("text") name = "";
}Meta Verilerin Kalıtımı
Meta veri nesneleri prototip zinciri boyunca birbirine bağlanır: alt sınıfın meta veri nesnesi, üst sınıfın meta verisini prototipi olarak taşır; bu nedenle devralınan girdiler geçersiz kılınmadıkları sürece görünür.
Symbol.metadata Uyumluluk Doldurucusu
Symbol.metadata iyi bilinen bir semboldür. Bunu desteklemeyen ortamlarda, çalışma zamanının toplanan nesneyi iliştirebilmesi için bir uyumluluk doldurucusu atarsınız.
(Symbol as any).metadata ??= Symbol.for("Symbol.metadata");reflect-metadata Olmadan Meta Veriler
Bu API, dekoratör önerisinin kendisinin bir parçasıdır; dolayısıyla ayrı reflect-metadata kitaplığını gerektirmez. Bu kitaplık yalnızca eski deneysel tasarım türü çıktısı için önemini korur (sonraki ders).
Pratik Bir Okuma Yardımcısı
Küçük bir erişimci, herhangi bir sınıfın meta verilerini okumayı merkezileştirir ve hiçbiri yoksa boş bir nesne döndürür.
function getMeta(cls: any): Record<string, any> {
return (cls[Symbol.metadata] as Record<string, any>) ?? {};
}Neden Önemlidir
Meta veriler, dekoratörleri tek kullanımlık davranış sarmalayıcılarından sınıflarınızın bildirimsel açıklamasına dönüştürür. Çatılar, çalışma zamanında yansıtma hilelerine başvurmadan ORM'ler, doğrulayıcılar ve yönlendiriciler oluşturmak için bu açıklamayı okur.
Kısa Kontrol
Meta veri API'sini anlayıp anlamadığınızı doğrulayın.
Özet
Dekoratör meta veri API'si, her dekoratöre paylaşılan bir context.metadata nesnesi sağlar ve bu nesneyi Symbol.metadata aracılığıyla sınıf üzerinde erişilebilir kılar. Dekoratörler, harici bir kitaplık olmadan yapılandırılmış ve kalıtsal meta veriler biriktirerek bildirimsel ve çatılarla uyumlu sınıf açıklamalarını mümkün kılar.
Sıkça Sorulan Sorular
“Dekoratör Üst Verileri” dersi ücretsiz mi?
Evet — “Dekoratör Üst Verileri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“Dekoratör Üst Verileri” dersinde ne öğreneceğim?
Üst veri API'siyle üst veriler ekleyin ve okuyun. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Dekoratör Üst Verileri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- 3. Aşama Dekoratörlerini Açıklama
- Dekoratör Üst Verileri
- reflect-metadata ve Tasarım Türleri
- Dekoratör Çerçevesi Oluşturma