angular es6-shim

Angular2 ¿por qué necesitamos la es6-shim



angular-polyfills (2)

Su editor utiliza las tipografías para proporcionar sugerencias de código / intellisense, y es6-shim.min.js es un código que emula las características de ES6 para los navegadores ES5. Algunas de esas características son Promise , Array.from() ...

Mientras que su código se traduce a ES5, debe incluir es6-shim para poder usar esas nuevas funciones ... Considere este código ES6:

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

será traducido al código ES5:

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

pero sin es6-shim Promise estaría indefinido ...

Siguiendo la Guía de inicio rápido de Angular2 , se nos indica que es6-shim en 2 lugares:

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

Tenía la impresión de que estamos compilando nuestro código es5 a es5 .

Configurado en tsconfig.json

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

Si el resultado final es que el navegador está cargando es5 , ¿por qué el navegador necesita es6 para es6 ?


TypeScript no viene con polyfills incorporados. Existen ciertas características que no se pueden trasladar, aquí es donde entran los rellenos múltiples como es-shim .

El archivo de definición de TypeScript le proporcionará soporte de escritura dentro del editor elegido y es-shim proporcionará la implementación de la funcionalidad que TypeScript no transpila al código ES5.

Algunas de estas características que TypeScript no transpila son:

  • Promesas
  • Funciones que cuelgan de objetos prototipo ( Array.from() , Array.of() , Number.isInteger() , etc.)
  • Módulo de carga

El enfoque general es:

La regla de oro es que si hay un emisor canónico / sano que no tiene un gran éxito, intentaremos apoyarlo. No agregamos ningún método de tiempo de ejecución ni estructuras de datos, que es más de lo que sirve core.js (o cualquier pollyfil) . - Fuente (desarrollador de TypeScript)