假设您有一个这样的类,它附加了 Router
装饰器。
@Router
class AuthRouter {
constructor(private cacheService: CacheService) {}
}
如何从
Router
装饰器中获取构造函数参数类型?假设我们已经存储了一个 CacheService
的单例,如果我们知道类名“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))
}
因此,无论何时我们使用
AuthRouter
,它都会将 CacheService
注入(inject)其中。 最佳答案
import 'reflect-metadata'
function Router(target) {
const types = Reflect.getMetadata('design:paramtypes', target);
// return a modified constructor
}
请注意,您正在调用没有第三个参数的 getMetadata。
types
将是构造函数参数的数组。 types[0].name === 'CacheService'
在你的情况下。关于TypeScript 装饰器,获取构造函数参数类型和注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43471592/