Angular: no se puede encontrar Promesa, Mapa, Conjunto e Iterador

Después de instalar Angular, el comstackdor de Typescript sigue recibiendo algunos errores acerca de no encontrar Promise , Map , Set e Iterator .

Hasta ahora los ignoré pero ahora necesito Promise para que mi código pueda funcionar.

 import {Component} from 'angular2/core'; @Component({ selector: 'greeting-cmp', template: `
{{ asyncGreeting | async}}
` }) export class GreetingCmp { asyncGreeting: Promise = new Promise(resolve => { // after 1 second, the promise will resolve window.setTimeout(() => resolve('hello'), 1000); }); } Additional information: npm -v is 2.14.12 node -v is v4.3.1 typescript v is 1.6

Los errores:

 ................ERROS OF MY CODE................. C:\Users\armyTik\Desktop\angular2\greeting_cmp.ts Error:(7, 20) TS2304: Cannot find name 'Promise'. Error:(7, 42) TS2304: Cannot find name 'Promise'. ......................................... C:\Users\armyTik\Desktop\angular2\node_modules\angular2\platform\browser.d.ts Error:(77, 90) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\application_ref.d.ts Error:(83, 60) TS2304: Cannot find name 'Promise'. Error:(83, 146) TS2304: Cannot find name 'Promise'. Error:(96, 51) TS2304: Cannot find name 'Promise'. Error:(96, 147) TS2304: Cannot find name 'Promise'. Error:(133, 90) TS2304: Cannot find name 'Promise'. Error:(171, 81) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\change_detection\parser\locals.d.ts Error:(3, 14) TS2304: Cannot find name 'Map'. Error:(4, 42) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\debug\debug_node.d.ts Error:(14, 13) TS2304: Cannot find name 'Map'. Error:(24, 17) TS2304: Cannot find name 'Map'. Error:(25, 17) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\di\provider.d.ts Error:(436, 103) TS2304: Cannot find name 'Map'. Error:(436, 135) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\linker\compiler.d.ts Error:(12, 50) TS2304: Cannot find name 'Promise'. Error:(16, 41) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\linker\dynamic_component_loader.d.ts Error:(108, 136) TS2304: Cannot find name 'Promise'. Error:(156, 150) TS2304: Cannot find name 'Promise'. Error:(197, 128) TS2304: Cannot find name 'Promise'. Error:(203, 127) TS2304: Cannot find name 'Promise'. Error:(204, 141) TS2304: Cannot find name 'Promise'. Error:(205, 119) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\render\api.d.ts Error:(13, 13) TS2304: Cannot find name 'Map'. Error:(14, 84) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\async.d.ts Error:(27, 33) TS2304: Cannot find name 'Promise'. Error:(28, 45) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\collection.d.ts Error:(1, 25) TS2304: Cannot find name 'MapConstructor'. Error:(2, 25) TS2304: Cannot find name 'SetConstructor'. Error:(4, 27) TS2304: Cannot find name 'Map'. Error:(4, 39) TS2304: Cannot find name 'Map'. Error:(7, 9) TS2304: Cannot find name 'Map'. Error:(8, 30) TS2304: Cannot find name 'Map'. Error:(11, 43) TS2304: Cannot find name 'Map'. Error:(12, 27) TS2304: Cannot find name 'Map'. Error:(14, 23) TS2304: Cannot find name 'Map'. Error:(15, 25) TS2304: Cannot find name 'Map'. Error:(95, 41) TS2304: Cannot find name 'Set'. Error:(96, 22) TS2304: Cannot find name 'Set'. Error:(97, 25) TS2304: Cannot find name 'Set'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\lang.d.ts Error:(13, 17) TS2304: Cannot find name 'Map'. Error:(14, 17) TS2304: Cannot find name 'Set'. Error:(78, 59) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\promise.d.ts Error:(2, 14) TS2304: Cannot find name 'Promise'. Error:(7, 32) TS2304: Cannot find name 'Promise'. Error:(8, 38) TS2304: Cannot find name 'Promise'. Error:(9, 35) TS2304: Cannot find name 'Promise'. Error:(9, 93) TS2304: Cannot find name 'Promise'. Error:(10, 34) TS2304: Cannot find name 'Promise'. Error:(11, 32) TS2304: Cannot find name 'Promise'. Error:(11, 149) TS2304: Cannot find name 'Promise'. Error:(12, 43) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\http\headers.d.ts Error:(43, 59) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\http\url_search_params.d.ts Error:(11, 16) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\platform\browser\browser_adapter.d.ts Error:(75, 33) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\platform\dom\dom_adapter.d.ts Error:(85, 42) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\CoreOperators.d.ts Error:(35, 67) TS2304: Cannot find name 'Promise'. Error:(50, 66) TS2304: Cannot find name 'Promise'. Error:(89, 67) TS2304: Cannot find name 'Promise'. Error:(94, 38) TS2304: Cannot find name 'Promise'. Error:(94, 50) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\Observable.d.ts Error:(46, 62) TS2304: Cannot find name 'Promise'. Error:(47, 42) TS2304: Cannot find name 'Iterator'. Error:(103, 74) TS2304: Cannot find name 'Promise'. Error:(103, 84) TS2304: Cannot find name 'Promise'. Error:(143, 66) TS2304: Cannot find name 'Promise'. Error:(158, 65) TS2304: Cannot find name 'Promise'. Error:(201, 66) TS2304: Cannot find name 'Promise'. Error:(206, 38) TS2304: Cannot find name 'Promise'. Error:(206, 50) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\ForkJoinObservable.d.ts Error:(6, 50) TS2304: Cannot find name 'Promise'. Error:(7, 58) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\FromObservable.d.ts Error:(7, 38) TS2304: Cannot find name 'Promise'. Error:(7, 51) TS2304: Cannot find name 'Iterator'. C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\PromiseObservable.d.ts Error:(9, 31) TS2304: Cannot find name 'Promise'. Error:(10, 26) TS2304: Cannot find name 'Promise'. 

Angular 5 con Typescript ^ 2.0.0

Esto también debería funcionar igual con las versiones anteriores de Angular 2+.

Para que esto funcione con typescript 2.0.0, hice lo siguiente.

npm install --save-dev @types/core-js

tsconfig.json

  "compilerOptions": { "declaration": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, "mapRoot": "./", "module": "es6", "moduleResolution": "node", "noEmitOnError": true, "noImplicitAny": false, "outDir": "../dist/out-tsc", "sourceMap": true, "target": "es5", "typeRoots": [ "../node_modules/@types" ], "types": [ "core-js" ] } 

Más sobre @types con mecanografía 2.0.0.

  1. https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/
  2. https://www.npmjs.com/~types

Instalar ejemplo:

 npm install --save-dev @types/core-js 

Errores de identificador duplicado

Esto es más probable debido a que ya se están importando duplicados de ediciones de ecmascript 6 de otro lugar, muy probablemente un viejo es6-shim.

Verifique dos typings.d.ts Asegúrese de que no hay referencias a es6 . Elimine cualquier referencia a es6 de su directorio de typings si tiene uno.

Por ejemplo:

Esto entrará en conflicto con los types:['core-js'] en typings.json.

 { "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160602141332" // es6-shim will also conflict } } 

Incluir core-js en la matriz de tipos en tsconfig.json debe ser el único lugar desde donde se importa.

Angular CLI 1.0.0-beta.30

Si está utilizando Angular-CLI, elimine la matriz lib en typings.json . Esto parece entrar en conflicto con la statement de core-js en tipos.

 "compilerOptions" : { ... // removed "lib": ["es6", dom"], ... }, "types" : ["core-js"] 

Usuarios de Tormenta web / Intellij que utilizan la CLI angular

Asegúrese de que el comstackdor de mecanografía incorporado esté desactivado. Esto entrará en conflicto con la CLI. Para comstackr su typescript con la CLI, puede configurar una configuración ng serve .

enter image description here

Tsconfig compilerOptions lib vs tipos

Si prefiere no instalar las definiciones de tipo core js, hay algunas librerías es6 que vienen incluidas con typescript. Esos se utilizan a través de la propiedad lib: [] en tsconfig.

Vea aquí, por ejemplo: https://www.typescriptlang.org/docs/handbook/compiler-options.html

Nota: Si –lib no se especifica, se inyecta una biblioteca predeterminada. La biblioteca por defecto inyectada es: ► Para –target ES5: DOM, ES5, ScriptHost ► Para –target ES6: DOM, ES6, DOM.Iterable, ScriptHost

tl; dr

Respuesta corta ya sea "lib": [ "es6", "dom" ] o "types": ["core-js"] se puede usar para resolver can't find Promise,Map, Set and Iterator . Sin embargo, el uso de ambos causará errores de identificación duplicados.

También tengo el mismo problema: “Promesa no encontrada”, cuando el código quiere crear un objeto Promesa.

Intenté alguna solución encontrada en stackoverflow, incluida la de sacar System.config ({…}) para formar system.js y tenerla incluida en index.html.

Finalmente resolví el problema. El problema es que, en index.html, se incluye es6-shim.min.js. Sin embargo, en tsconfig.json, la propiedad “objective” en “compilerOptions” tiene el valor de “es5”. Después de cambiarlo a “es6”, el error desapareció.

Angular 2 Final

– Soporte es5 (Funciona perfectamente con TS 2.0.0 +)

Por actualización, es6-shim no es compatible ahora, si tienes ambas tipificaciones instaladas juntas es6-shim & core-js . Elimine la es6-shim mencionando en tsconfig.json. Ahora puede consultar la tipificación core-js a es5 para soporte de main.ts dentro de main.ts

 /// 

tsconfig.json

 exclude: [ "node_modules", //<-- this would be needed in case of VS2015 "node_modules/@typings", "typings" ] 

- es6 suppport

Solo necesita establecer "target" propiedad "target" en es6 , y luego todo desaparecerá. Y el código transstackdo estará en formato es6 .

Actualizado a partir de angular-2.0.0-rc.4

TLDR;

  1. Transpile a es6

    • el error desaparece (con algunos errores).
  2. Transpile a es5

    • instalar tipings
    • instalar el calce es6
    • asegúrese de que comstack con su código.
    • el error desaparece

Para los lectores:

Opción 1: Transpile a es6 o es2015

tsconfig.json:

 { "compilerOptions": { "target": "es6", "module": "system", "moduleResolution": "node", ... }, "exclude": [ "node_modules", "jspm_packages" ] } 

Tenga en cuenta que uglifyjs no es compatible con es6 en este momento . Esto podría afectarlo haciendo paquetes de producción.

Opción 2: Transpile a es5, instale los typings, y luego instale el es6-shim:

tsconfig.json:

 { "compilerOptions": { "target": "es5", "module": "system", "moduleResolution": "node", ... }, "exclude": [ "node_modules", "jspm_packages" ] } 

Instale typings, luego instale es6-shim:

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

Si sigue esta ruta, debe asegurarse de que el comstackdor typescript pueda encontrar el archivo .d.ts.

Tienes dos opciones:

a. Asegúrate de que tu tsconfig.json esté en el mismo nivel que la carpeta de typings.

segundo. Incluya una referencia en su archivo main.ts donde su aplicación angular2 está iniciada.

Opción A: asegúrese de que su tsconfig.json esté en el mismo nivel que la carpeta de typings.

Nota: NO use la bandera de exclusión para excluir la carpeta de typings.

 project |-- src |-- node_modules |-- package.json |-- typings |-- tsconfig.json 

Opción B: referencia en el archivo principal antes del arranque (no haga esto):

Como se muestra en otras respuestas, este archivo ya no está incluido en Angular

main.ts:

 ///  

Esto es lo que funcionó para mí.

compruebe si existe un archivo typings.json ,

Se ve algo como esto,

 { "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160317120654", "jasmine": "registry:dt/jasmine#2.2.0+20160505161446", "node": "registry:dt/node#6.0.0+20160613154055" } } 

Instala el paquete typings globalmente.

 sudo npm install -g typings 

después de instalar typings , ejecuta

 typings install 

luego reinicia el servidor.

Cuando tenga Typescript> = 2, la opción “lib” en tsconfig.json hará el trabajo. No hay necesidad de tipings. https://www.typescriptlang.org/docs/handbook/compiler-options.html

 { "compilerOptions": { "target": "es5", "lib": ["es2016", "dom"] //or es6 instead of es2016(es7) } } 

Tuve un problema similar en el que no reconocía el método Promise.resolve () . Cambié el valor de “objective” de ES5 a ES6 en tsconfig.json . Eso resolvió el problema.

Espero que esto ayude.

Dado que Angular 2 fue a RC 0, /angular2/typings/browser.d.ts ya no forma parte de la distribución de Angular 2. El archivo se puede instalar por separado.

Desde aquí: https://github.com/angular/angular/issues/8513 hay algunas opciones. El que funcionó para mí fue:

 typings install es6-shim --ambient --save // In your app.ts ///  

Si usa Angular2 RC1 con typings v1.0 +, use el comando:

 typings install dt~core-js --save --global 

para instalar la definición core-js y luego hacer referencia a su índice global en sus main.ts:

 ///  

Si usa es6-shim o alguna otra biblioteca shim, instale typings para eso en su lugar

Consulte https://github.com/typings/typings/issues/517

Me las arreglé para solucionar este problema sin tener que añadir ninguna referencia triple al archivo de arranque TS, cambiar a ES6 (que trae un montón de problemas, tal como dijo @DatBoi ) actualizar las comstackciones integradas de NodeJS y / o NPM o instalar typings globalmente

Esto es lo que hice en algunos pasos:

  • typings agregados en el archivo package.json del proyecto.
  • agregó un bloque de script en el archivo package.json para ejecutar / actualizar typings después de cada acción de NPM.
  • se agregó un archivo typings.json en la carpeta raíz del proyecto que contiene una referencia a core-js , que es uno de los mejores paquetes de shim / polyfill disponibles en el momento para solucionar problemas de ES5 / ES6.

Así es como debe verse el archivo package.json (solo líneas relevantes):

 { "version": "1.0.0", "name": "YourProject", "private": true, "dependencies": { ... "typings": "^1.3.2", ... }, "devDependencies": { ... }, "scripts": { "postinstall": "typings install" } } 

Y aquí está el archivo typings.json :

 { "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160602141332", "jasmine": "registry:dt/jasmine#2.2.0+20160621224255", "node": "registry:dt/node#6.0.0+20160621231320" } } 

( Jasmine and Node no son necesarios, pero sugiero que los guardes en caso de que los necesites en el futuro).

Esta solución funciona bien con Angular2 RC1 a RC4, que es lo que necesitaba, pero creo que también solucionará problemas similares con otros paquetes de biblioteca habilitados para ES6.

AFAIK, creo que esta es la forma más limpia posible de solucionarlo sin estropear la configuración predeterminada de VS2015.

Para obtener más información y un análisis detallado del problema, también sugiero leer esta publicación .

Tuve el mismo problema al crear un objeto de promesa dentro de mi clase. Al cambiar el nombre del objective a “es5” de “es6” se solucionó mi problema.

Otra solución posible es reinstalar typings:
Esto funciona para mí para "angular2": "2.0.0-beta.15"

  1. npm clean cache
  2. npm install
  3. npm install -g typings
  4. Eliminar el directorio de typings del proyecto (Directorio donde están instalados los módulos de tipings)
  5. typings install
  6. npm run

Otra buena solución. Necesita crear un archivo typings.json en el directorio raíz del proyecto con contenido:

 { "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160725163759", "jasmine": "registry:dt/jasmine#2.2.0+20160621224255", "node": "registry:dt/node#6.0.0+20160909174046" } } 

A continuación, instale el paquete de tipings global o local, si no está instalado (lo instalaré global):

 sudo npm install --global typings 

En el comando de ejecución del directorio raíz del proyecto:

 typings install 

Después de que ese problema está resuelto. No es necesario cambiar el objective tsconfig a es6 o es7. Su aplicación web no es compatible después de eso con alguna versión anterior de los navegadores.

Encontré la referencia en boot.ts no era la ruta correcta. Al actualizar esa ruta a /// resolvieron los errores Promesa.

Estoy entrenando con un tutorial angular2 (héroe).
Después de instalar @ types / core-js comentado en estas respuestas, recibí un error de “Duplicate identifier”.
En mi caso, se resolvió como eliminar la línea lib en tsconfig.json.

// “lib”: [“es2015”, “dom”]

Si vino aquí porque ve estos errores en Visual Studio 2017, entonces tiene un problema diferente al anterior, si logra comstackr. Esto se debe a que el servicio de idiomas no selecciona su tsconfig.json.

https://developercommunity.visualstudio.com/content/problem/208941/vs-156-ignores-tsconfigjson-and-typescriptcompileb.html

Debe establecer la Acción de comstackción de su tsconfig.json en “Contenido” (clic derecho -> Propiedades), luego VS lo levantará.

mi estructura de archivos es la siguiente:

 project |--node-modules | |--angular2 | | |--typings | | | |--browser.d.ts |--src |--app.ts 

pegue el siguiente en la parte superior de su app.ts y su problema resuelto

 ///  

Obtuve el mismo problema y pude encontrarlo en github https://github.com/angular/angular-cli/issues/1901 , que indica que era un problema con typescript@2.0.2 .

Mecanografiar downgrade a 2.0.0 tanto global como localmente me ayudó a resolverlo.

Globalmente:

 npm uninstall typescript -g npm cache clean npm install typescript@2.0.0 -g 

Localmente: ingrese a la carpeta del proyecto que creó mediante ng new

 npm uninstall typescript npm cache clean npm install typescript@2.0.0 

También cambié la versión de typescript dentro de package.json de ^2.0.0 a 2.0.0 , pero no funcionó hasta que bajé la versión de la instalación mecanografiada local.