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.json
archivo con solo { }
el contenido (si aún no tiene un package.json. Llame npm install --save @types/es6-promise
y tsc --init
. El primer comando de instalación de npm cambiará package.json
para incluir el es6-promise como una dependencia. Tsc --init creará un tsconfig.json
archivo 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-dev
debería usarse en lugar de --save
, ya que la biblioteca solo se usa en tiempo de compilación.
Utilice las opciones del compilador target
y lib
para compilar directamente es5
sin necesidad de instalar el es6-shim
. (Probado con TypeScript 2.1.4
). En la sección lib, use cualquiera es2016
o es2015.promise
.
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"es2015.promise",
"dom"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
Utilice la NGP para instalar el es6-shim
de la organización de tipos .
npm install @types/es6-shim --save-dev
Antes de TypeScript 2.0, use tipings para instalar es6-shim
globalmente desde DefinitelyTyped .
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
La typings
opción se usa npm
para instalar typings
globalmente y luego se usa typings
para instalar la cuña. El dt~
prefijo significa descargar la cuña de DefinitelyTyped. La --global
opció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'
es2016
no 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.promise
para 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