2015-03-06 10 views
14

C'è una foto molto interessante è stata pubblicata nel TypeScript ufficiale blog.Che cosa significa @ (al segno) nell'ultimo esempio di TypeScript (presumibilmente v1.5)?

Wierd syntax

Mi chiedo che il @ (chiocciola) simbolo sta facendo lì da (per quanto ne so) che non può essere utilizzato in identificatori JavaScript.

+2

Vorrei leggere su atscript. si chiama annotazione. –

+5

In TypeScript, l'operatore "@" indica un decoratore (nell'esempio sopra, un decoratore di classe). Puoi saperne di più sui decoratori in [documenti TypeScript] (https://www.typescriptlang.org/docs/handbook/decorators.html). – sherb

risposta

11

La grande novità di questa settimana è la fusione di AtScript e TypeScript.

Il seguente esempio dalla documentazione AtScript ...

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

compila in seguente 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 è stato progettato per essere un livello sopra dattiloscritto (cioè un super-set di un super-set) - ma ora lo two projects are one.

Annotations are described thus:

  • AtScript sintassi annotazione è solo una scorciatoia di porre le stesse informazioni in ES5. Sarebbe ragionevole per uno sviluppatore ES5 scrivere queste annotazioni manualmente. Potrebbe anche essere fornita una libreria di supporto.
  • Le annotazioni possono essere inserite solo sulle funzioni.

  • Un'annotazione posizionata su una classe è un'annotazione posizionata sulla funzione di costruzione della classe.

  • Un'annotazione posizionata su un campo viene spostata nella funzione di costruzione.

  • Tutte le annotazioni sono tradotte come proprietà su una funzione.