Может ли кто-нибудь объяснить, что такое ES7 reflect-metadata?

изучал ES6, JSPM & angular2 в течение недели, и я нашел это РЕПО ES6-loader

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

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

это использование systemjs polyfill JSPM для получения ES6 import.

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

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>"
    })
];

как вы можете видеть символ @ абстрагирует много свойств аннотаций класса и делает его более Д. Р. Г.

делая этот еще один шаг угловая команда знает, что аннотации немного абстрактны для нового пользователя. Более того, ES5 слишком многословен. вот почему они сделали a.js что сделает взаимодействие с аннотациями лучше:

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