Soy un principiante completo en TypeScript y me pregunto si es posible usar las promesas de ES6 en Typecript y qué tendría que hacer para que funcionen. Estoy ejecutando el nodo 0.11.14 y obtengo un error durante la compilación "No puedo encontrar el nombre 'Promesa'"
javascript
typescript
es6-promise
dchang
fuente
fuente
es6-promise
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í:
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
: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
- fuenteedit3 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. Llamenpm install --save @types/es6-promise
ytsc --init
. El primer comando de instalación de npm cambiarápackage.json
para incluir el es6-promise como una dependencia. Tsc --init creará untsconfig.json
archivo para ti.Ahora puede usar la promesa en su archivo de mecanografía
var x: Promise<any>;
. Ejecutetsc -p .
para compilar su proyecto. No deberías tener errores.fuente
--save-dev
debería usarse en lugar de--save
, ya que la biblioteca solo se usa en tiempo de compilación.Alternativa # 1
Utilice las opciones del compilador
target
ylib
para compilar directamentees5
sin necesidad de instalar eles6-shim
. (Probado con TypeScript2.1.4
). En la sección lib, use cualquieraes2016
oes2015.promise
.Alternativa # 2
Utilice la NGP para instalar el
es6-shim
de la organización de tipos .Alternativa # 3
Antes de TypeScript 2.0, use tipings para instalar
es6-shim
globalmente desde DefinitelyTyped .La
typings
opción se usanpm
para instalartypings
globalmente y luego se usatypings
para instalar la cuña. Eldt~
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.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'
fuente
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. Usees2015.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
Esto incluirá las declaraciones de promesa que vienen con TypeScript sin tener que establecer el objetivo en ES6.
fuente
Si usa node.js 0.12 o superior / typecript 1.4 o superior, simplemente agregue opciones de compilación como:
Más información: https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
Si usa
tsconfig.json
, entonces así:Más información: https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
fuente
Esta es la forma más reciente de hacer esto, la respuesta anterior está desactualizada:
typings install --global es6-promise
fuente
Uso de promesas ES6 nativas con mecanografiado 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 Crear mecanografiado Versión ECMAScript = ECMAScript6
fuente
A. Si usa una
"target": "es5"
versión TypeScript inferior a 2.0:B. Si usa
"target": "es5"
y TypeScript versión 2.0 o superior:C. Si se usa
"target": "es6"
, no hay necesidad de hacer nada.fuente
"target": "es6"
con TypeScript 2.1.1 y todavía estoy obteniendoCannot find name 'Promise'
.Tuve que bajar
@types/core-js
a 9.36 para que funcione con"target": "es5"
set en mi tsconfig."@types/core-js": "0.9.36",
fuente