Qué tan compatible es (será) TypeScript con ES6 (ECMAScript 2015)

Pensé que TypeScript es (básicamente) ECMAScript 6 (también conocido como 2015) con annotations de tipo adicionales.

Mi comstackdor de TypeScript (1.6.2) se queja del siguiente código:

if (calc.distance > Number.EPSILON) { ... } 

error TS2339: la propiedad 'EPSILON' no existe en el tipo 'NumberConstructor'.

¿Hay algún problema con los typings o TypeScript no (todavía) es realmente un superset de ES6?

No he probado cosas tan vanguardistas como Map , WeakMap , Promises, Generators, …

¿Está TypeScript solo un poco detrás de ES6 o tal vez camina en otra dirección? ¿Debo ejecutar la salida del comstackdor de TypeScript a través de Babel?

Acabo de comenzar con TypeScript y no quiero respaldar el caballo equivocado.

Por qué Number.EPSILON no existe para los objectives ES3 y ES5

Pensé que TypeScript es (básicamente) ECMAScript 6 (también conocido como 2015) con annotations de tipo adicionales.

TypeScript es ECMAScript con annotations adicionales. Algunas características de ES6, como classs, parameters de reposo, lambdas, for of , let , tienen un código equivalente limpio en ES5 o ES3, y el comstackdor puede generar algún código para estos objectives. Pero la nueva API necesita ser polyfilled, y el comstackdor no agrega ninguna biblioteca en time de ejecución (a diferencia de Babel o Traceur).

Tu código comstack con el objective ES6.

Con los objectives ES3 y ES5, debe: 1 / cargar un relleno múltiple ( como este ) y 2 / agregar las definiciones para el comstackdor de TypeScript.

Encuentre la definición de TypeScript de una API de ES6

Entonces, necesitas encontrar las definiciones. Aquí hay un consejo para encontrar definiciones para la API de ES6.

Todas las definiciones para ES6 API ya están definidas en el comstackdor. Podemos usarlos En su directory de nodos, abra el file lib/node_modules/typescript/lib/lib.es6.d.ts Luego, busca EPSILON . Encontrarás una interfaz NumberConstructor . Debajo está su código (TS 1.6.2):

 interface NumberConstructor { /** * The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1 * that is representable as a Number value, which is approximately: * 2.2204460492503130808472633361816 x 10‍−‍16. */ EPSILON: number; /** * Returns true if passed value is finite. * Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a * number. Only finite values of the type number, result in true. * @param number A numeric value. */ isFinite(number: number): boolean; /** * Returns true if the value passed is an integer, false otherwise. * @param number A numeric value. */ isInteger(number: number): boolean; /** * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a * number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter * to a number. Only values of the type number, that are also NaN, result in true. * @param number A numeric value. */ isNaN(number: number): boolean; /** * Returns true if the value passed is a safe integer. * @param number A numeric value. */ isSafeInteger(number: number): boolean; /** * The value of the largest integer n such that n and n + 1 are both exactly representable as * a Number value. * The value of Number.MIN_SAFE_INTEGER is 9007199254740991 2^53 − 1. */ MAX_SAFE_INTEGER: number; /** * The value of the smallest integer n such that n and n − 1 are both exactly representable as * a Number value. * The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)). */ MIN_SAFE_INTEGER: number; /** * Converts a string to a floating-point number. * @param string A string that contains a floating-point number. */ parseFloat(string: string): number; /** * Converts A string to an integer. * @param s A string to convert into a number. * @param radix A value between 2 and 36 that specifies the base of the number in numString. * If this argument is not supplied, strings with a prefix of '0x' are considenetworking hexadecimal. * All other strings are considenetworking decimal. */ parseInt(string: string, radix?: number): number; } 

Solo agregue este código en su proyecto.

solución legítima:

 interface INumber { EPSILON: any } declare var Number: INumber;