TypeScript-dekoratører, hente konstruktørargumenttyper og injeksjon
Anta at du har en klasse som dette med Router-dekortøren festet til den.
@Router
class AuthRouter {
constructor(private cacheService: CacheService) {}
}
Hvordan får jeg konstruktørens parametertyper fra innenfor Router-dekoren? Anta at vi har lagret en singleton av CacheService som vi kan få tilgang til hvis vi kjente klassenavnet "CacheService".
function Router(target) {
// somehow get the constructor class name
const dependencyNames = 'CacheService' // an array if multiple args in constructor
// getSingleton is a function that will retrieve
// a singleton of the requested class / object
return new target(getSingleton(dependencyNames))
}
Så når vi bruker AuthRouter, vil den allerede ha CacheService injisert i seg.
Svar #1
import 'reflect-metadata'
function Router(target) {
const types = Reflect.getMetadata('design:paramtypes', target);
// return a modified constructor
}
Merk at du kaller getMetadata uten en tredje parameter. types vil være et array av konstruktørparametrene. types[0].name === 'CacheService' i ditt tilfelle.
