- 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.
Bei der Serverentwicklung mit Node.js wird man oft von den unzähligen Verlockungen von Spring beeinflusst.
Dies liegt an seiner strukturierten und systematischen Natur, die ein willkürliches Ausbrechen erschwert.
Daher entstand im Node.js-Bereich das Framework Nest.js.
Es gab viele, die mit der Entwicklung von Servern in einer strukturierten Form wie Spring arbeiten wollten.
Die DI von Spring nutzt jedoch die Reflection zur Laufzeit, um die DI auf Sprachebene zu unterstützen.
Ähnlich verhält es sich bei Dotnet, das Attribute nutzt, um die DI über Reflection durchzuführen.
Wie kann Nest.js also DI durchführen?
Spring und Dotnet basieren auf Compilersprachen, die Reflection auf Sprachebene unterstützen, aber...
ecma script ist einfach nur eine Interpretersprache, nicht wahr?
Im Folgenden finden Sie ein Beispiel aus dem Nest.js-Tutorial.
Dieser in TypeScript geschriebene Code wird nach dem Kompilieren die Typangaben nicht mehr enthalten, und der Typ des Arguments im Konstruktor der Klasse ist unbekannt.
Die Lösung lag in der Sprachspezifikation.
Reflect
Glücklicherweise gab es eine Funktion auf Sprachebene, die das Hinzufügen von Metadaten zu Objekten ermöglicht.
Es ist einfach eine einfache Funktion zum Hinzufügen und Abrufen von Metadaten zu Objekten.
Daher dachte TypeScript:
Sollen wir beim Kompilieren von Klassen die Typinformationen in die Metadaten einfügen?
Daher speichert TypeScript die Informationen über die für den Konstruktor benötigten Argumenttypen in Reflect, sobald ein Klassendekorator verwendet wird.
Dies beinhaltet keine Transformationen oder "schwarze Magie", sondern ist eine Funktion des TypeScript-Compilers.
Wenn die Typen der für den Konstruktor benötigten Argumente in den Metadaten der Klasse enthalten sind,
können wir sie hinzufügen, da wir den Typ kennen, wenn wir die Klasse laden.
Die Implementierung kann in NestJS nachgelesen werden, aber da dies zu umfangreich ist, empfehle ich eine andere Bibliothek.
Die obige Bibliothek stammt von Microsoft und der Code ist sehr sauber.
Ich empfehle Ihnen, sich diese einmal anzusehen, und schließe hiermit den Artikel.
Kommentare0