5

在 Java 中,我们可以使用“类路径扫描”找到所有具有给定注释的类。

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

4

2 回答 2

6

这是一个例子。它假定您有某种引用范围的方法。magical类装饰器创建一个字符串属性,调用它应用到的isMagical类,并将其值分配为“确实”。然后该findMagicalInScope()函数遍历指定范围内的属性(这就是类都在一个模块中的原因)并查看它们是否具有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);

在 Node.js 中运行时将生成此输出:

Is foo magical?  indeed!
bar is not magical.  :-(
Is bas magical?  indeed!
于 2015-05-30T04:33:25.047 回答
-1

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

于 2018-01-17T15:18:35.240 回答