Respuestas:
El lib.d.ts actual 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
Luego puede usarlo así:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
editar Puede usarlo sin una definición cuando apunta a ES6 (con el compilador TypeScript): tenga en cuenta que aún necesita que Promise exista en el curso de ejecución (por lo que no funcionará en navegadores antiguos :)) Agregue / Edite lo siguiente en su tsconfig.json:
"compilerOptions": {
"target": "ES6"
}
edit 2 Cuando salga TypeScript 2.0, las cosas cambiarán un poco (aunque lo anterior todavía funciona) pero los archivos de definición se pueden instalar directamente con npm como a continuación:
npm install --save @types/es6-promise- fuente
edit3 Actualizando la respuesta con más información para usar los tipos.
Cree un package.jsonarchivo con solo { }el contenido (si aún no tiene un package.json. Llame npm install --save @types/es6-promisey tsc --init. El primer comando de instalación de npm cambiará package.jsonpara incluir el es6-promise como una dependencia. Tsc --init creará un tsconfig.jsonarchivo para ti.
Ahora puede usar la promesa en su archivo de mecanografía var x: Promise<any>;. Ejecute tsc -p .para compilar su proyecto. No deberías tener errores.
--save-devdebería usarse en lugar de --save, ya que la biblioteca solo se usa en tiempo de compilación.
Utilice las opciones del compilador targety libpara compilar directamente es5sin necesidad de instalar el es6-shim. (Probado con TypeScript 2.1.4). En la sección lib, use cualquiera es2016o es2015.promise.
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"es2015.promise",
"dom"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
Utilice la NGP para instalar el es6-shimde la organización de tipos .
npm install @types/es6-shim --save-dev
Antes de TypeScript 2.0, use tipings para instalar es6-shimglobalmente desde DefinitelyTyped .
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
La typingsopción se usa npmpara instalar typingsglobalmente y luego se usa typingspara instalar la cuña. El dt~prefijo significa descargar la cuña de DefinitelyTyped. La --globalopción significa que los tipos de cuñas estarán disponibles durante todo el proyecto.
https://github.com/Microsoft/TypeScript/issues/7788 - No se puede encontrar el nombre 'Promesa' y no se puede encontrar el nombre 'requerir'
es2016no es una buena idea a menos que su objetivo sea compatible con ES2016. Hay muchos navegadores que admiten promesas, pero no todo en ES2016. Use es2015.promisepara incluir solo los tipos de promesas sin incluir tipos para todo en ES2016.
A partir de TypeScript 2.0, puede incluir tipificaciones para promesas nativas incluyendo lo siguiente en su tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
Esto incluirá las declaraciones de promesa que vienen con TypeScript sin tener que establecer el objetivo en ES6.
Si usa node.js 0.12 o superior / typecript 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 así:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
}
}
Más información: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
Esta es la forma más reciente de hacer esto, la respuesta anterior está desactualizada:
typings install --global es6-promise
No se requiere instalación npm ya que ES6 Promises es nativo.
Proyecto Node.js -> Propiedades -> pestaña Crear mecanografiado Versión ECMAScript = 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);
}
);
A. Si usa una "target": "es5"versión TypeScript inferior a 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 se usa "target": "es6", no hay necesidad de hacer nada.
"target": "es6"con TypeScript 2.1.1 y todavía estoy obteniendo Cannot find name 'Promise'.
es6-promise