Angular2 зачем нам нужен es6-shim

Следуя Angular2 руководству быстрого запуска, нам будет предложено включить es6-shim в 2 места:

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"
}

У меня создалось впечатление, что мы составляем код es6 до es5.

Конфигурировано в tsconfig.json

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

Если конечным результатом является загрузка браузера es5, почему браузер нуждается в прокладках для es6?

Ответы

Ответ 1

Типики используются вашим редактором, чтобы дать вам подсказку кода /intellisense, а es6-shim.min.js - это код, который эмулирует функции ES6 для браузеров ES5. Некоторые из этих функций: Promise, Array.from()...

Пока ваш код переводится на ES5, вам нужно включить es6-shim, чтобы вы могли использовать эти новые функции в нем... Рассмотрим этот код ES6:

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

он будет переведен в код ES5:

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

но без es6-shim Promise будет undefined...

Ответ 2

TypeScript не поставляется со встроенными полиполками. Есть некоторые функции, которые он не переносит, вот где заходят полисы, такие как es-shim.

Файл определения TypeScript предоставит вам поддержку ввода в выбранном вами редакторе, а es-shim предоставит реализацию для функций, которые TypeScript не переместится в код ES5.

Некоторые из таких функций TypeScript не передаются:

  • Promises
  • Функции, зависающие от объектов-прототипов (Array.from(), Array.of(), Number.isInteger() и т.д.)
  • Загрузка модуля

Общий подход:

Эмпирическое правило состоит в том, что если есть каноническое/санированное излучение, которое не обладает огромным перфомансом, мы постараемся его поддержать. Мы не добавляем какие-либо методы времени выполнения или структуры данных, что больше подходит для работы с core.js(или любым pollyfil). - источник (TypeScript разработчик)