2015-03-06 18 views
14

Es gibt ein sehr interessantes Bild wurde im offiziellen TypeScript blog veröffentlicht.Was bedeutet das @ (at-Zeichen) im letzten TypeScript (vermutlich v1.5) Beispiel?

Wierd syntax

Ich frage mich, was das @ (at-Zeichen) Symbol tut es da (soweit ich weiß) nicht in JavaScript-Kennungen verwendet werden kann.

+2

Ich würde auf atscript lesen. es heißt eine Anmerkung. –

+5

In TypeScript bezeichnet der Operator "@" einen Decorator (im obigen Beispiel einen Class Decorator). Sie können mehr über Dekoratoren in den TypeScript-Dokumenten erfahren (https://www.typescriptlang.org/docs/handbook/decorators.html). – sherb

Antwort

11

Die große Neuigkeit in dieser Woche ist die Zusammenführung von AtScript und TypeScript.

Das folgende Beispiel aus der AtScript Dokumentation ...

@Component() 
class MyApp { 
    server:Server; 
    @Bind('name') name:string; 
    @Event('foo') fooFn:Function; 
    @Inject() 
    constructor(@parent server:Server) {} 
    greet():string {} 
} 

Kompiliert in den folgenden JavaScript ...

function MyApp() {} 
MyApp.properties = { 
    'server': { is: Server }, 
    'name': { is:string, 
      annotate: [new Bind('name']}, 
    'fooFn': { is:Function, 
      annotate:[new Event('foo')]} 
} 
MyApp.annotate = [ 
    new Component(), 
    new Inject() 
]; 
MyApp.parameters = [ 
    {is:Server, annotate:[parent]} 
]; 
MyApp.prototype.greet = function() {} 
MyApp.prototype.greet.returns = string; 

AtScript geplant wurde eine Schicht oben auf Typoskript sein (dh ein Super-Set von einem Super-Set - aber jetzt die two projects are one.

Annotations are described thus:

  • AtScript Annotation Syntax ist nur eine Kurzschreibweise der gleichen Informationen in ES5 platzieren. Es wäre vernünftig für einen ES5-Entwickler, diese Annotationen manuell zu schreiben. Eine Hilfsbibliothek könnte sogar bereitgestellt werden.
  • Anmerkungen können nur auf Funktionen platziert werden.

  • Eine Annotation, die für eine Klasse platziert wird, ist eine Annotation, die auf die Konstruktorfunktion der Klasse platziert wird.

  • Eine Anmerkung, die auf einem Feld platziert ist, wird in die Konstruktorfunktion verschoben.

  • Alle Anmerkungen werden als Eigenschaften einer Funktion übersetzt.