26

There is a very interesting picture was posted in the official TypeScript blog.

Wierd syntax

I wonder what the @ (at sign) symbol is doing there since (as far as I know) it cannot be used in JavaScript identifiers.

Chris Wijaya
  • 1,276
  • 3
  • 16
  • 34
Trident D'Gao
  • 18,973
  • 19
  • 95
  • 159
  • 2
    i would read up on atscript. it is called an annotation. – Daniel A. White Mar 06 '15 at 19:51
  • 7
    In TypeScript, the "@" operator denotes a decorator (in the example above, a class decorator). You can learn more about decorators in [the TypeScript docs](https://www.typescriptlang.org/docs/handbook/decorators.html). – sherb Jun 28 '16 at 20:31

1 Answers1

19

The big news this week is the merging of AtScript and TypeScript.

The following example from the AtScript documentation...

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

Compiles into the following 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 was planned to be a layer on top of TypeScript (i.e. a super-set of a super-set) - but now the two projects are one.

Annotations are described thus:

  • AtScript annotation syntax is just a shorthand of placing the same information in ES5. It would be reasonable for an ES5 developer to write these annotations manually. A helper library could even be provided.
  • Annotations can only be placed on functions.

  • An annotation placed on a class is an annotation placed on the class’ constructor function.

  • An annotation placed on a field gets moved to the constructor function.

  • All annotations are translated as properties on a function.

Fenton
  • 241,084
  • 71
  • 387
  • 401