0Pricing
TypeScript Academy · Ders

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

  1. 3. Aşama Dekoratörlerini Açıklama
  2. Dekoratör Üst Verileri
  3. reflect-metadata ve Tasarım Türleri
  4. Dekoratör Çerçevesi Oluşturma
← TypeScript Academy Sayfasına Dön