我想知道是否可以使用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加载我的路由框架。
这是否清楚?另外,告诉我,我将再次编辑: - )答案 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阶段调用它。这将触发所有装饰器,您可以在调用带注释的函数之前填充数组或路径。
希望这会有所帮助。