使用TypeScript 1.5运行时装饰器/注释

时间:2015-05-27 05:07:28

标签: typescript

我想知道是否可以使用typescript 1.5进行运行时注释/装饰器? (在NodeJS / IoJS上下文中)

这意味着注释或装饰器是在运行时创建和解释的,而不是在我们调用特定函数时?

感谢您提前

编辑:

我需要在运行时填充一系列路由,使用类似这样的注释将它们分配给Restify / Express / Connect:

@MyRoute({url: "/search/:myCriteria", verb: "GET"})
    getASearchResult() {
        console.log('we got a search result')
    }

问题是装饰器只在调用方法时才会被插入。

事实是,在调用相关的回调之前,不同的路由框架需要知道能够重定向到它的路由。

这就是为什么我需要在运行时填充一系列路由,以使用它需要工作的url pattern / verb / callback加载我的路由框架。

这是否清楚?另外,告诉我,我将再次编辑: - )

3 个答案:

答案 0 :(得分:2)

  

问题是装饰器只在调用方法时才会被插入。   事实是,在调用相关的回调之前,不同的路由框架需要知道能够重定向到它的路由。

静态成员在定义时执行,所以我会这样做:

declare var MyRoute: any;

class Awesome{
    @MyRoute({ url: "/search/:myCriteria", verb: "GET" })
    static getASearchResult() {
        console.log('we got a search result')
    }
}

在这种情况下,MyRoute将被调用。如果你想在成员函数上使用它,那么我会手动调用装饰器。

答案 1 :(得分:0)

  

意味着注释或装饰器是在运行时创建和解释的,而不是在我们调用特定函数时

这是相当含糊的。但是,您可以从字符串中创建function

var foo = new Function('functionToDecorate','console.log("Function is : " + functionToDecorate.toString()); return functionToDecorate'); 
// usage
function bar(){};
bar = foo(bar);

随意使用multiline字符串,以便更轻松地创建函数:http://basarat.gitbooks.io/typescript/content/docs/template-strings.html

答案 2 :(得分:0)

我会使用我提到的相同方法:

Class initialize using typescript decorators

即在同一模块中添加虚拟功能。然后在应用程序的init阶段调用它。这将触发所有装饰器,您可以在调用带注释的函数之前填充数组或路径。

希望这会有所帮助。