0Pricing
TypeScript Academy · Pelajaran

Metadata Dekorator

Lampirkan dan baca metadata dengan API metadata.

Metadata Dekorator adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.

API Metadata Dekorator

Dekorator terstandar menyertakan saluran metadata bawaan. Objek konteks menyediakan objek metadata yang dapat Anda tulisi, dan kelas kemudian membawanya di bawah kunci Symbol.metadata yang telah ditentukan.

context.metadata

Setiap konteks dekorator berbagi satu objek metadata untuk kelas yang sedang didefinisikan. Dekorator melampirkan data ke dalamnya; objek tersebut menjadi metadata kelas.

function tag(label: string) {
  return function (value: any, context: DecoratorContext) {
    context.metadata[context.name] = label;
  };
}

Membaca melalui Symbol.metadata

Setelah kelas didefinisikan, metadata yang terkumpul tersedia di SomeClass[Symbol.metadata].

class User {
  @tag("identifier") id = 0;
  @tag("display")    name = "";
}

const meta = (User as any)[Symbol.metadata];
console.log(meta); // { id: "identifier", name: "display" }

Mengapa Objek Bersama

Karena semua dekorator pada sebuah kelas menulis ke objek metadata yang sama, Anda dapat mengumpulkan informasi dari banyak dekorator ke dalam satu catatan terpadu yang menjelaskan kelas tersebut.

Menyimpan Metadata Terstruktur

Nilai metadata dapat memiliki bentuk apa pun. Pola yang umum adalah menyimpan catatan bersarang dengan kunci berupa nama anggota.

function column(type: string) {
  return function (value: any, context: ClassFieldDecoratorContext) {
    const md = context.metadata as any;
    md.columns ??= {};
    md.columns[context.name] = { type };
  };
}

Metadata Tingkat Kelas

Dekorator kelas juga dapat menulis metadata, misalnya nama tabel yang melengkapi informasi kolom per bidang.

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 = "";
}

Pewarisan Metadata

Objek metadata ditautkan sepanjang rantai prototipe: objek metadata subkelas memiliki metadata induk sebagai prototipenya, sehingga entri yang diwarisi terlihat kecuali ditimpa.

Polifil Symbol.metadata

Symbol.metadata adalah simbol yang dikenal secara khusus. Pada lingkungan yang tidak memilikinya, Anda menetapkan polifil agar runtime dapat melampirkan objek yang terkumpul.

(Symbol as any).metadata ??= Symbol.for("Symbol.metadata");

Metadata Tanpa metadata-refleksi

API ini merupakan bagian dari proposal dekorator itu sendiri, sehingga tidak memerlukan pustaka metadata-refleksi terpisah. Pustaka tersebut tetap relevan hanya untuk emisi tipe desain eksperimental yang lebih lama (pelajaran berikutnya).

Pembantu Pembacaan Praktis

Pengakses kecil memusatkan pembacaan metadata dari kelas apa pun dan mengembalikan objek kosong jika tidak ada metadata.

function getMeta(cls: any): Record<string, any> {
  return (cls[Symbol.metadata] as Record<string, any>) ?? {};
}

Mengapa Ini Penting

Metadata mengubah dekorator dari pembungkus perilaku sekali pakai menjadi deskripsi deklaratif kelas Anda. Kerangka kerja membaca deskripsi ini untuk membangun ORM, validator, dan perute tanpa trik refleksi saat runtime.

Pemeriksaan Cepat

Pastikan pemahaman Anda tentang API metadata.

Rangkuman

API metadata dekorator memberikan objek context.metadata yang sama kepada setiap dekorator dan mengeksposnya pada kelas melalui Symbol.metadata. Dekorator mengumpulkan metadata terstruktur yang dapat diwariskan tanpa pustaka eksternal, sehingga memungkinkan deskripsi kelas yang deklaratif dan ramah terhadap kerangka kerja.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Metadata Dekorator” gratis?

Ya — teks lengkap “Metadata Dekorator” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Metadata Dekorator”?

Lampirkan dan baca metadata dengan API metadata. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai TypeScript Academy?

Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Metadata Dekorator” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Penjelasan Dekorator Tahap 3
  2. Metadata Dekorator
  3. reflect-metadata dan Jenis Design
  4. Membangun Kerangka Kerja Dekorator
← Kembali ke TypeScript Academy