Körtidsdekorerare/annotation med TypeScript 1.5


Jag undrade om det var möjligt att ha runtime-notation/decorator med TypeScript 1.5? (i ett NodeJS/IoJS-sammanhang)

Betyder det att annoteringarna eller dekoratören skapas och tolkas vid körning, och inte när vi anropar den specifika funktionen?

Tack på förhand

REDIGERA :

Jag behöver fylla en matris med rutter vid körning för att ge dem till Restify/Express/Connect med en annotation som denna:

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

Problemet är att dekoratören endast tolkas när metoden anropas.

Faktum är att de olika routningsramverken behöver känna till rutten för att kunna omdirigera till den, innan de anropar den associerade callbacken.

Det är därför jag behöver fylla en matris med rutter vid körning, för att ladda mitt routningsramverk med URL-mönstret/verb/callback som det behöver för att fungera.

Är detta tydligt? Annars, säg till, så redigerar jag igen :-)

Svar #1

Problemet är att dekoratören bara tolkas när metoden anropas. Faktum är att de olika routningsramverken behöver veta rutten för att kunna omdirigera till den, innan de anropar den associerade callbacken.

Statisk medlemmar körs vid punkten för definition, så jag skulle göra:

declare var MyRoute: any;

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

I det här fallet kommer MyRoute att anropas. Om du vill använda det på en medlemsfunktion skulle jag anropa dekoratorn manuellt.

Svar #2

Vilket betyder att anteckningarna eller dekoratören skapas och tolkas vid körning, och inte när vi anropar den specifika funktionen

Det är ganska otydligt. Men för vad det är värt kan du skapa function från en sträng :

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

Känn dig fri att använda multiline-strängar för att göra det lättare att skapa funktioner: http://basarat.gitbooks.io/typescript/content/docs/template-strings.html