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 разработчик)