通过给定的@decorators 获取所有类/构造函数

Iva*_*tan 6 javascript typescript

大家好,我想知道是否有可能获得所有给定装饰器 javascript/typescript 的类。

例如我有课

@mydecorator
class SomeClass1{
}
Run Code Online (Sandbox Code Playgroud)

还有一些在模块中

@mydecorator
class SomeClass2{
}
Run Code Online (Sandbox Code Playgroud)

然后在运行时的其他模块中,我想获得所有具有装饰器 @mydecorator 的类或构造函数......恐怕这是不可能的:(

export function getaAllClassesByDecorator(decorator:string){
... return constructor or something that  i am able to call static method 
}
Run Code Online (Sandbox Code Playgroud)

ple*_*ock 9

您需要在某处“注册”所有使用@mydecorator 的类。这个寄存器逻辑应该在@mydecorator 中实现。例如:

export const registeredClasses = [];
export function mydecorator() {
     return function(target: Function) {
          registeredClasses.push(target);
     };
}

@mydecorator()
class SomeClass1{
}

@mydecorator()
class SomeClass2{
}
Run Code Online (Sandbox Code Playgroud)

现在您可以在registeredClasses数组中获取所有已注册的类

  • 那行得通吗?如果此装饰器装饰的类从未被直接引用,则它们将不会被注册,因为装饰器将永远不会被执行。我错了吗? (2认同)
  • 如果不调用类则不起作用。 (2认同)