TypeScript Decorators: Membongkar Kekuatan Metaprogramming untuk Kode yang Lebih Fleksibel dan Terstruktur
1. Pendahuluan
Pernahkah Anda melihat sintaks @ di atas sebuah kelas, metode, atau properti dalam kode TypeScript Anda? Jika Anda sering bekerja dengan framework seperti NestJS, Angular, atau bahkan TypeORM, Anda pasti sudah tidak asing lagi dengan sintaks ini. Itu adalah Decorator!
Decorator adalah fitur metaprogramming yang kuat di TypeScript (dan proposal Stage 3 di JavaScript) yang memungkinkan kita untuk menambahkan anotasi dan memodifikasi kelas, metode, properti, atau parameter saat waktu definisi. Bayangkan decorator sebagai fungsi khusus yang “membungkus” atau “menghias” kode Anda, memberinya kekuatan atau perilaku tambahan tanpa mengubah kode intinya secara langsung.
Kenapa Decorator itu penting? Dalam pengembangan aplikasi modern, kita seringkali dihadapkan pada kebutuhan untuk:
- Menambahkan metadata: Misalnya, menandai sebuah properti sebagai “wajib” atau sebuah metode sebagai “endpoint API”.
- Mengubah perilaku: Mengubah cara sebuah metode dieksekusi, menambahkan logika logging, validasi, atau caching.
- Mengurangi boilerplate: Menghindari penulisan kode berulang untuk tugas-tugas umum seperti otorisasi atau dependency injection.
Decorator hadir sebagai solusi elegan untuk masalah-masalah ini, memungkinkan kita menulis kode yang lebih bersih, lebih deklaratif, dan lebih mudah dikelola. Artikel ini akan membawa Anda menyelami dunia TypeScript Decorators, memahami konsepnya, jenis-jenisnya, cara membuat decorator kustom, hingga contoh kasus nyata yang akan meningkatkan fleksibilitas dan struktur kode Anda.
📌 Catatan Penting: Decorator di TypeScript saat ini masih dalam status “eksperimental” dan memerlukan konfigurasi khusus ("experimentalDecorators": true) di tsconfig.json. Meskipun demikian,