如何找到所有 类 装饰有某种装饰?

How to find all classes decorated with a certain decoration?

在 Java 中,我们可以使用 "classpath scanning".

找到所有具有给定注释的 类

我们如何在 TypeScript 中做类似的事情?有没有办法找到所有 类 装饰有一些装饰?

举个例子。它假定您有某种引用范围的方法。 magical class 装饰器在其应用的 class 上创建了一个名为 isMagical 的字符串 属性,并将其值分配为 "indeed".然后 findMagicalInScope() 函数循环遍历指定范围内的属性(这就是 classes 都在一个模块中的原因)并查看它们是否具有 isMagical 属性。

module myContainer {

  @magical
  export class foo {
  }

  export class bar {
  }

  @magical
  export class bas {
  }
}


function magical(item: any) {
  item.isMagical = "indeed";
}

function findMagicalInScope(theScope: any) {
  for(let prop in theScope) {
    if (theScope[prop]["isMagical"]) {
        console.log(`Is ${prop} magical?  ${theScope[prop]["isMagical"]}!`);
    } else {
      console.log(`${prop} is not magical.  :-(`);
    }
  }
}

findMagicalInScope(myContainer);

当 运行 in Node.js 时将生成此输出:

Is foo magical?  indeed!
bar is not magical.  :-(
Is bas magical?  indeed!

正确的方法是从装饰器处理程序填充静态集合。