Ответ 1
'reflect-metadata'
- это пакет, который является предложением для ES7. Это позволяет включать метаданные в класс или функцию; в основном это синтаксический сахар.
Пример. Angular 2 ES6:
@Component({selector: "thingy"})
@View({template: "<div><h1>Hello everyone</h1></div>"})
class Thingy{};
Как вы можете видеть, после @Component и @View нет точек с запятой. Это потому, что они являются по существу целями (мета) данных по классу.
Теперь рассмотрим тот же код в Angular 2, но в ES5:
function Thingy(){}
Thingy.annotations = [
new angular.ComponentAnnotation({
selector: "thingy"
}),
new angular.ViewAnnotation({
template: "<div><h1>Hello everyone</h1></div>"
})
];
Как вы можете видеть, символ @абстрагирует много свойств аннотаций класса и делает его более D.R.Y.
Следуя еще одному шагу Angular, команда знает, что аннотации немного абстрактны для нового пользователя. Более того, ES5 является слишком многословным. поэтому они сделали a.js
, что улучшит взаимодействие с аннотациями: