sincronas promesas funciones ejemplo await async anidadas javascript typescript es6-promise

javascript - funciones - Cómo usar Typescript con promesas ES6 nativas



promesas javascript (8)

Uso de ES6 Promises nativas con Typescript en Visual Studio 2015 + herramientas Node.js 1.2

No se requiere instalación npm ya que ES6 Promises es nativo.

Proyecto Node.js -> Propiedades -> pestaña de compilación de Typescript ECMAScript version = ECMAScript6

import http = require(''http''); import fs = require(''fs''); function findFolderAsync(directory : string): Promise<string> { let p = new Promise<string>(function (resolve, reject) { fs.stat(directory, function (err, stats) { //Check if error defined and the error code is "not exists" if (err && err.code === "ENOENT") { reject("Directory does not exist"); } else { resolve("Directory exists"); } }); }); return p; } findFolderAsync("myFolder").then( function (msg : string) { console.log("Promise resolved as " + msg); }, function (msg : string) { console.log("Promise rejected as " + msg); } );

Soy un principiante completo de Typescript y me pregunto si es posible usar las promesas de ES6 en Typescript y lo que tendría que hacer para que funcionen. Estoy ejecutando el nodo 0.11.14 y recibo un error durante la compilación "No se puede encontrar el nombre ''Promesa''"


Alternativa # 1

Utilice las opciones del compilador de target y lib para compilar directamente en es5 sin la necesidad de instalar el es6-shim . (Probado con TypeScript 2.1.4 ). En la sección lib, use es2016 o es2015.promise .

// tsconfig.json { "compilerOptions": { "target": "es5", "lib": [ "es2015.promise", "dom" ] }, "include": [ "src/**/*.ts" ], "exclude": [ "node_modules" ] }

Alternativa # 2

source es6-shim desde la organización de tipos .

npm install @types/es6-shim --save-dev

Alternativa # 3

Antes de TypeScript 2.0, use typings para instalar el es6-shim globalmente desde DefinitelyTyped .

npm install typings --global --save-dev typings install dt~es6-shim --global --save-dev

La opción de typings usa npm para instalar typings globalmente y luego utiliza typings para instalar el shim. El prefijo dt~ significa descargar el shim de DefinitelyTyped. La opción --global significa que los tipos de shim estarán disponibles durante todo el proyecto.

Ver también

https://github.com/Microsoft/TypeScript/issues/7788 - No se puede encontrar el nombre ''Promesa'' y no se puede encontrar el nombre ''requerir''


A partir de TypeScript 2.0 puede incluir tipificaciones para promesas nativas al incluir lo siguiente en su tsconfig.json

"compilerOptions": { "lib": ["es5", "es2015.promise"] }

Esto incluirá las declaraciones prometedoras que se incluyen con TypeScript sin tener que establecer el destino en ES6.


A. Si usa "target": "es5" y la versión de TypeScript debajo de 2.0:

typings install es6-promise --save --global --source dt

B. Si usa "target": "es5" y TypeScript versión 2.0 o superior:

"compilerOptions": { "lib": ["es5", "es2015.promise"] }

C. Si usa "target": "es6" , no hay necesidad de hacer nada.


Esta es la manera más reciente de hacer esto, la respuesta anterior está desactualizada:

typings install --global es6-promise


La versión actual de lib.d.ts no tiene promesas definidas, por lo que necesita un archivo de definición adicional, por eso está obteniendo errores de compilación.

Podría, por ejemplo, usar (como dice @elclanrs) usar el paquete es6-promise con el archivo de definición de DefinitelyTyped: es6-promise definition

Puede usarlo así:

var p = new Promise<string>((resolve, reject) => { resolve(''a string''); });

editar Puede usarlo sin una definición cuando se dirige a ES6 (con el compilador de TypeScript): tenga en cuenta que todavía necesita que Promise exista en el tiempo de ejecución por supuesto (para que no funcione en navegadores antiguos :)) Agregue / edite lo siguiente a su tsconfig.json :

"compilerOptions": { "target": "ES6" }

editar 2 Cuando se publique TypeScript 2.0, las cosas cambiarán un poco (aunque las anteriores todavía funcionan) pero los archivos de definición se pueden instalar directamente con npm como se muestra a continuación:

npm install --save @types/es6-promise - source

edit3 Actualizando la respuesta con más información para usar los tipos.

Cree un archivo package.json con solo { } como contenido (si todavía no tiene un paquete.json. Llame a la npm install --save @types/es6-promise y tsc --init . El primer comando de instalación de npm cambie su package.json para incluir es6-promise como una dependencia. tsc --init creará un archivo tsconfig.json para usted.

Ahora puede usar la promesa en su archivo de texto mecanografiado var x: Promise<any>; . Ejecute tsc -p . para compilar tu proyecto No deberías tener errores.



Tuve que degradar @types/core-js a 9.36 para que funcione con "target": "es5" establecido en mi tsconfig.

"@types/core-js": "0.9.36",