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.
Si usa node.js 0.12 o superior / mecanografiado 1.4 o superior, simplemente agregue opciones de compilación como:
tsc a.ts --target es6 --module commonjs
Más información: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
Si usa tsconfig.json
, entonces tsconfig.json
siguiente:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
}
}
Más información: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
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",