谁能解释一下 es7 reflect-metadata 是什么意思?

Can anyone explain what es7 reflect-metadata is all about?

学习 ES6、JSPM 和 angular2 一周了,我找到了这个 repo ES6-loader

如果我们查看底部脚本中的 index.html,您会看到

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

这是使用 JSPM 的 systemjs polyfill 来获取 ES6 的 import

问题:在这种情况下,reflect-metadata 到底做了什么? npm reflect-meta 越看文档越不明白它的作用?

'reflect-metadata' 是一个为 ES7 提案的包。它允许将元数据包含到 class 或函数中;本质上是 syntax sugar.

例子。 Angular 2 ES6:

@Component({selector: "thingy"})
@View({template: "<div><h1>Hello everyone</h1></div>"})
class Thingy{};

如您所见,@Component 和@View 之后没有分号。这是因为它们本质上是 class 上的(元)数据链。

现在让我们看看 Angular 2 中的相同代码,但在 ES5 中:

function Thingy(){}
Thingy.annotations = [
    new angular.ComponentAnnotation({
        selector: "thingy"
    }),
    new angular.ViewAnnotation({

        template: "<div><h1>Hello everyone</h1></div>"
    })
];

如您所见,@ 符号抽象出 class 的大量注释 属性 并使其变得更多 D.R.Y.

更进一步 Angular 团队知道注释对于新用户来说有点抽象。此外,ES5 过于冗长。这就是他们制作 a.js 的原因,这将使与注释的接口更好:

Video to understand this