- Reflect - JavaScript | MDN
- The Reflect namespace object contains static methods for invoking interceptable JavaScript object internal methods. The methods are the same as those of proxy handlers.
Ketika mengembangkan server dengan Node.js, kita seringkali tergoda oleh berbagai fitur Spring.
Karena Spring terstruktur, sistematis, dan sulit untuk dimodifikasi secara sembarangan.
Oleh karena itu, di lingkungan Node.js, muncullah framework bernama Nest.js.
Banyak pengembang yang menginginkan pengembangan server dalam bentuk terstruktur seperti Spring.
Namun, DI (Dependency Injection) Spring menggunakan refleksi runtime untuk mendukung DI pada tingkat bahasa.
Dotnet juga melakukan hal yang sama, melacak berdasarkan atribut dan melakukan DI menggunakan refleksi.
Lalu, bagaimana Nest.js dapat melakukan DI?
Spring dan Dotnet memiliki bahasa dasar yang merupakan bahasa compiler, sehingga mendukung refleksi pada tingkat bahasa.
Sedangkan ecma script hanyalah... bahasa interpreter biasa, bukan?
Berikut adalah salah satu contoh dari tutorial Nest.js.
Kode TypeScript yang ditulis seperti ini, setelah dikompilasi, tag tipenya akan hilang, dan kita tidak akan mengetahui tipe argument yang dibutuhkan oleh constructor dari class tersebut.
Jawabannya ada di spesifikasi bahasa.
Reflect
Untungnya, ada fitur yang memungkinkan kita menambahkan metadata ke setiap objek pada tingkat bahasa.
Ini hanyalah fungsi sederhana untuk menambahkan dan mengambil metadata dari objek.
Maka, TypeScript berpikir...
Bagaimana jika kita menambahkan informasi tipe ke metadata saat mengkompilasi class?
Jadi, TypeScript menyimpan informasi tentang nilai argumen yang dibutuhkan oleh constructor class di Reflect setiap kali class decorator digunakan.
Tidak ada transformasi atau sihir hitam yang digunakan di sini, ini murni fungsi dari compiler TypeScript.
Dengan informasi tipe argumen constructor yang tersimpan di metadata class,
kita dapat mengetahui tipenya dan menambahkannya.
Anda dapat melihat implementasinya di NestJS, tetapi karena terlalu panjang, saya sarankan library lain.
Library ini dibuat oleh microsoft, sehingga kodenya cukup rapi.
Saya sarankan untuk melihatnya, dan sampai jumpa di tulisan selanjutnya.
Komentar0