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

使用TypeScript 1.5的运行时装饰器/注释,typescript,Typescript,我想知道是否有可能在typescript 1.5中使用运行时注释/装饰器?(在NodeJS/IoJS上下文中) 这意味着注释或装饰器是在运行时创建和解释的,而不是在调用特定函数时创建和解释的 谢谢你提前通知 编辑: 我需要在运行时填充一个路由数组,以便使用如下注释将它们重新设置为Restify/Express/Connect: @MyRoute({url: "/search/:myCriteria", verb: "GET"}) getASearchResult() {

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

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

谢谢你提前通知

编辑:

我需要在运行时填充一个路由数组,以便使用如下注释将它们重新设置为Restify/Express/Connect:

@MyRoute({url: "/search/:myCriteria", verb: "GET"})
    getASearchResult() {
        console.log('we got a search result')
    }
问题是只有在调用该方法时才解释装饰器

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

这就是为什么我需要在运行时填充一个路由数组,用它需要的url模式/动词/回调加载路由框架

清楚了吗?否则,请告诉我,我将再次编辑:-)

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

这是相当模糊的。但是,您可以从字符串创建
函数

var foo = new Function('functionToDecorate','console.log("Function is : " + functionToDecorate.toString()); return functionToDecorate'); 
// usage
function bar(){};
bar = foo(bar);
您可以随意使用
多行
字符串,以便更轻松地创建函数:

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

静态成员在定义点执行,因此我将执行以下操作:

declare var MyRoute: any;

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

在这种情况下,将调用
MyRoute
。如果您希望在成员函数上使用它,那么我将手动调用decorator

我将使用我在中提到的相同方法:

即在同一模块中添加虚拟函数。然后在应用程序的初始化阶段调用它。这将触发所有装饰器,并且您将能够在调用带注释的函数之前填充数组或路由


希望这会有所帮助。

谢谢你的回答,我会研究在我的案例中使用静态函数是否有问题。我认为在运行时调用decorator对我来说不是一个好主意,如果我有十几条路由,可能会很奇怪。我会研究的,谢谢你的帮助,另一个不需要打开另一个话题的快速问题。什么时候调用类的装饰器?在瞬间?那么类的属性呢?@Skahrz不,当类被调用时,它们都被调用declared@Skahrz当定义类的代码运行时。要检查代码何时运行,可以通过在decorator中放置断点(或输出到decorator中的控制台)来调试代码。我建议您查看javascript输出,以便更好地了解幕后发生的事情