Angular2 why do we need the es6-shim

我们两清 提交于 2019-12-03 16:22:36

问题


Following the Angular2 Quickstart Guide we are instructed to include es6-shim in 2 places:

1) index.html

<script src="node_modules/es6-shim/es6-shim.min.js"></script>

2) typings.json

"ambientDependencies": {
  "es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#6697d6f7dadbf5773cb40ecda35a76027e0783b2"
}

I was under the impression that we are compiling our es6 code down to es5.

Configured in tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    ...

If the end result is that the browser is loading es5, why does the browser needs shims for es6?


回答1:


Typings are used by your editor to give you code hinting/intellisense, and es6-shim.min.js is a code that emulates ES6 features for ES5 browsers. Some of those features are Promise, Array.from()...

While your code is translated to ES5, you need to include es6-shim so you can use those new features in it... Consider this ES6 code:

let test1 = () => 123 + 456;
let test2 = new Promise((resolve, reject ) => {});

it will be translated to ES5 code:

var test1 = function () { return 123 + 456; };
var test2 = new Promise(function (resolve, reject) { });

but without es6-shim Promise would be undefined...




回答2:


TypeScript does not come with built-in polyfills. There are certain features it doesn't transpile, this is where polyfills like es-shim come in.

The TypeScript definition file will provide you with typing support within your chosen editor and the es-shim will provide the implementation for the functionality that TypeScript doesn't transpile to ES5 code.

A few of such features TypeScript doesn't transpile are:

  • Promises
  • Functions hanging off of prototype objects (Array.from(),Array.of(),Number.isInteger(), etc)
  • Module loading

The general approach is:

The rule of thumb is that if there's a canonical/sane emit that doesn't have a huge perf-hit, we'll try to support it. We don't add any runtime methods or data structures, which is more what core.js (or any pollyfil) serves to do. - source (TypeScript developer)



来源:https://stackoverflow.com/questions/35642223/angular2-why-do-we-need-the-es6-shim

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!