Кто-нибудь может объяснить, что такое отражающие метаданные es7?

Изучая ES6, JSPM и angular2 уже неделю, я нашел этот репозиторий ES6-loader.

если мы посмотрим на index.html в нижнем скрипте, вы увидите

 System.import('reflect-metadata')
  .then(function() {
    return System.import('app/index');
  })
  .catch(console.log.bind(console));

Это использует полифилл systemjs JSPM для получения import ES6.

Вопрос. Что на самом деле делают метаданные отражения в этой ситуации? npm Reflect-meta Чем больше я читаю документацию, тем меньше понимаю, что она делает?


person Armeen Harwood    schedule 29.05.2015    source источник
comment
Не уверен, что вы имеете в виду index.html, если это github.com/angular/ quickstart/blob/master/index.html, то Reflect-metadata/Reflect.js — это библиотека, которая расширяет: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/, который иногда используется в коде, который TypeScript компилятор (tsc) выплевывает   -  person dalvarezmartinez1    schedule 06.12.2016


Ответы (1)


'reflect-metadata' — это пакет, который является предложением для ES7. Это позволяет включать метаданные в класс или функцию; по сути, это синтаксический сахар.

Пример. Угловой 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, который улучшит взаимодействие с аннотациями:

Видео, чтобы понять это

person Armeen Harwood    schedule 04.06.2015
comment
Отличный ответ. Спасибо. - person Fintan Kearney; 07.09.2016
comment
Что такое a.js? Мой комментарий недостаточно длинный - person gyozo kudor; 05.11.2016
comment
@gyozokudor a.js был проектом для angular 2 и es5. Кажется, что команда angular 2, возможно, прекратила этот проект. - person Armeen Harwood; 07.11.2016