Что означает знак @(в знаке) в последнем примере TypeScript (предположительно, v1.5)?

В официальном TypeScript blog было опубликовано очень интересное изображение.

Wierd syntax

Интересно, что делает символ @(at sign), поскольку (насколько мне известно) его нельзя использовать в JavaScript-идентификаторах.

Ответы

Ответ 1

Большие новости на этой неделе - это слияние AtScript и TypeScript.

Следующий пример из документации AtScript...

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

Скомпилируется в следующий 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 планировался быть слоем поверх TypeScript (т.е. супер-набор супер-набора), но теперь два проекта - это один.

Аннотации описаны таким образом:

  • Синтаксис аннотации AtScript - это всего лишь сокращение размещения одной и той же информации в ES5. Разработчику ES5 было бы разумно написать эти аннотации вручную. Также может быть предоставлена ​​вспомогательная библиотека.
  • Аннотации могут быть помещены только на функции.

  • Аннотации, помещенные в класс, представляют собой аннотацию, помещенную в функцию конструктора классов.

  • Аннотации, помещенные в поле, перемещаются в конструктор.

  • Все аннотации переводится как свойства для функции.