如何找到装饰有某种装饰的所有课程?

时间:2015-05-30 01:49:23

标签: typescript typescript1.5

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

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

2 个答案:

答案 0 :(得分:5)

这是一个例子。它假设您有一些参考范围的方法。 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!

答案 1 :(得分:0)

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