javascript - formularios - tablas dinamicas angular 4
Angular: no se puede encontrar Promesa, Mapa, Conjunto e Iterador (19)
Actualizado a partir de angular-2.0.0-rc.4
TLDR;
-
Transpile a es6
- el error desaparece (con algunas trampas).
-
Transpile a es5
- instalar tipings
- instale la cuña es6
- asegúrese de que se compila 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 al hacer paquetes de producción.
Opción 2: Transpile a es5, instale tipings y luego instale es6-shim:
tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
...
},
"exclude": [
"node_modules",
"jspm_packages"
]
}
Instale tipings, luego instale es6-shim:
npm install typings --saveDev
typings install dt~es6-shim --global --save
Si sigue esta ruta, debe asegurarse de que el compilador mecanografiado pueda encontrar el archivo .d.ts.
Tienes dos opciones:
a. Asegúrese de que su tsconfig.json esté al mismo nivel que la carpeta de tipings.
segundo. Incluya una referencia en su archivo main.ts donde su aplicación angular2 esté arrancada.
Opción A: asegúrese de que su tsconfig.json esté al mismo nivel que la carpeta de tipings.
Nota: NO use el indicador de exclusión para excluir la carpeta de tipings.
project
|-- src
|-- node_modules
|-- package.json
|-- typings
|-- tsconfig.json
Opción B: referencia en el archivo principal antes del bootstrap (no haga esto):
Como se muestra en otras respuestas, Angular ya no incluye este archivo
main.ts:
/// <reference path="../../typings/globals/es6-shim/index.d.ts" />
Después de instalar Angular, el compilador mecanografiado sigue recibiendo algunos errores sobre 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: `<div>{{ asyncGreeting | async}}</div>`
})
export class GreetingCmp {
asyncGreeting: Promise<string> = 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 2 Final
- Soporte es5 (funciona perfectamente con TS 2.0.0 +)
Por actualización,
es6-shim
no es compatible ahora, si tiene ambas tipificaciones instaladas juntas
es6-shim
y
core-js
juntas.
Elimine la
es6-shim
mencionando en tsconfig.json.
Ahora puede consultar a continuación escribir
core-js
para
es5
soporte de
main.ts
dentro de
main.ts
///<reference path="./../typings/globals/core-js/index.d.ts"/>
tsconfig.json
exclude: [
"node_modules", //<-- this would be needed in case of VS2015
"node_modules/@typings",
"typings"
]
- soporte es6
Solo necesita establecer
"target"
propiedad
"target"
en
es6
, entonces todos los errores desaparecerán.
Y el código transpilado estará en formato
es6
.
Angular 5 con mecanografiado ^ 2.0.0
Esto también debería funcionar igual con versiones anteriores de Angular 2+.
Para que esto funcione con el mecanografiado 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 typecript 2.0.0.
- https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/
- https://www.npmjs.com/~types
Instalar Ejemplo:
npm install --save-dev @types/core-js
Errores de identificador duplicado
Esto es muy probable porque ya se están importando duplicados ecmascript 6 tipings desde otro lugar, muy probablemente un viejo es6-shim.
Verifique los
typings.d.ts
asegúrese de que no haya referencias a
es6
.
Elimine cualquier referencia a
es6
de su directorio de tipings 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
debería ser el único lugar desde el que se importa.
CLI angular 1.0.0-beta.30
Si está utilizando Angular-CLI, elimine la matriz lib en
typings.json
.
Esto parece entrar en conflicto con declarar core-js en tipos.
"compilerOptions" : {
...
// removed "lib": ["es6", dom"],
...
},
"types" : ["core-js"]
Usuarios de Webstorm / Intellij que utilizan la CLI angular
Asegúrese de que el compilador de mecanografiado incorporado esté deshabilitado.
Esto entrará en conflicto con la CLI.
Para compilar su mecanografiado con la CLI, puede configurar una configuración
ng serve
.
Tsconfig compilerOptions lib vs types
Si prefiere no instalar las definiciones de tipo core js, hay algunas bibliotecas es6 que vienen incluidas con typecript.
Esos se usan a través de la propiedad
lib: []
en tsconfig.
Consulte aquí, por ejemplo: https://www.typescriptlang.org/docs/handbook/compiler-options.html
Nota: Si no se especifica --lib, se inyecta una biblioteca predeterminada. La biblioteca predeterminada inyectada es: ► Para --target ES5: DOM, ES5, ScriptHost ► Para --target ES6: DOM, ES6, DOM.Iterable, ScriptHost
tl; dr
La respuesta corta
"lib": [ "es6", "dom" ]
o
"types": ["core-js"]
se puede usar para resolver
can''t find Promise,Map, Set and Iterator
.
Sin embargo, usar ambos provocará errores de identificador duplicados.
Al tener Typecript> = 2, la opción "lib" en tsconfig.json hará el trabajo. No hay necesidad de Typings. https://www.typescriptlang.org/docs/handbook/compiler-options.html
{
"compilerOptions": {
"target": "es5",
"lib": ["es2016", "dom"] //or es6 instead of es2016(es7)
}
}
Como Angular 2 pasó a RC 0, /angular2/typings/browser.d.ts ya no forma parte de la distribución 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
/// <reference path="typings/browser.d.ts" />
Encontré que la referencia en boot.ts no era la ruta correcta.
La actualización de esa ruta a
/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />
resolvió los errores de Promise.
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" } }
Instalar paquetes de tipings a nivel mundial.
sudo npm install -g typings
después de instalar tipings , ejecute
typings install
luego reinicie el servidor.
Estoy entrenando con un tutorial angular2 (héroe).
Después de instalar @ types / core-js comentado en estas respuestas, recibí el error "Identificador duplicado".
En mi caso, se resolvió eliminando la línea lib en tsconfig.json.
// "lib": ["es2015", "dom"]
Me las arreglé para solucionar este problema sin tener que agregar ninguna referencia de triple barra al archivo de arranque TS, cambiar a ES6 (que trae un montón de problemas, tal como dijo
share
) actualizar NodeJS de
NodeJS
y / o compilaciones de
NPM
o instalar
typings
globalmente
Esto es lo que hice en unos pocos pasos:
-
typings
agregados en el archivopackage.json
del proyecto. -
Se agregó un bloque de
script
en el archivopackage.json
para ejecutar / actualizartypings
después de cada acción de NPM. -
agregó un archivo
typings.json
en la carpeta raíz del proyecto que contiene una referencia acore-js
, que es uno de los mejores paquetes shim / polyfill que existen en este momento para solucionar problemas de ES5 / ES6.
Así es como debería 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
y
Node
no son necesarios, pero sugiero mantenerlos en caso de que lo necesite 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 alterar 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 en mi blog.
Noté que estos problemas aparecían después de actualizar de Angular 5 a Angular 6. Pude solucionar esto haciendo lo siguiente en VS2017:
- Asegúrese de que se instaló el SDK de TypeScript (a través del instalador de Visual Studio) para mi versión particular de TypeScript, 2.9
- Asegúrese de que la propiedad del proyecto Módulo del sistema esté configurada para que coincida con la de mi tsconfig.json: ES2015. Esto a menudo se sincroniza automáticamente si el archivo tsconfig está en la raíz del proyecto. Sin embargo, dado que estaba usando la plantilla VS Angular, coloca estos archivos en una subcarpeta "ClientApp" y no se configuró la propiedad del proyecto del Sistema de módulos.
tsconfig.json:
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"lib": [
"es2017",
"dom"
],
"module": "es2015",
"baseUrl": "./"
}
}
Obtuve el mismo problema y pude encontrarlo en github
https://github.com/angular/angular-cli/issues/1901
, que indica que era un problema con
[email protected]
.
La degradación del mecanografiado a
2.0.0
tanto a nivel global como local me ayudó a resolverlo.
Globalmente:
npm uninstall typescript -g
npm cache clean
npm install [email protected] -g
Localmente: VAYA a la carpeta del proyecto que creó con ng new
npm uninstall typescript
npm cache clean
npm install [email protected]
También cambié la versión del mecanografiado dentro de package.json de
^2.0.0
a
2.0.0
, pero no funcionó hasta que degradé la instalación del mecanografiado local.
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"
}
}
Luego instale el paquete de tipificación global o local, si no está instalado (lo instalo globalmente):
sudo npm install --global typings
En el comando de ejecución del directorio raíz del proyecto:
typings install
Después de que el problema se resuelva. No es necesario cambiar el objetivo de tsconfig a es6 o es7. Su aplicación web no admite después de eso alguna versión antigua de los navegadores.
Otra posible solución es reinstalar los tipos:
Esto funciona para mí para
"angular2": "2.0.0-beta.15"
-
npm clean cache
-
npm install
-
npm install -g typings
-
Eliminar el directorio
typings
del proyecto (Directorio donde están instalados los módulos Typings) -
typings install
-
npm run
Si usa Angular2 RC1 con tipings 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 su main.ts:
/// <reference path="../../../typings/index.d.ts" />
Si usa es6-shim o alguna otra biblioteca de shim, instale tipings para eso
Si vino aquí porque ve estos errores en Visual Studio 2017, entonces tiene un problema diferente al anterior, si tiene éxito en la compilación. Esto se debe a que el servicio de idiomas no elige tu tsconfig.json.
Debe configurar la Acción de compilación de su tsconfig.json en "Contenido" (clic derecho -> Propiedades), luego VS lo recogerá.
También tengo el mismo problema, "Promesa no encontrada", cuando el código quiere crear un objeto Promesa.
Intenté alguna solución encontrada en , incluida la que saca System.config ({...}) para formar system.js y la incluye 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 "target" en "compilerOptions" tiene el valor de "es5". Después de cambiarlo a "es6", el error desapareció.
Tuve el mismo problema al crear un objeto de promesa dentro de mi clase. Al cambiar el nombre de destino a "es5" de "es6" resolvió mi problema.
Tuve un problema similar cuando no reconocía el método Promise.resolve () . Cambié el valor "objetivo" de ES5 a ES6 en tsconfig.json . Eso resolvió el problema.
Espero que esto ayude.
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 se resolvió
/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />