Angolare: imansible trovare Promise, Map, Set e Iterator

Dopo aver installato Angular, il compilatore Typescript continua a ricevere alcuni errori sul mancato rilevamento di Promise , Map , Set e Iterator .

Fino ad ora li ho ignorati ma ora ho bisogno di Promise quindi il mio codice può funzionare.

 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

Gli errori:

 ................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

Questo dovrebbe anche funzionare allo stesso modo con le versioni precedenti di Angular 2+.

Per farlo funzionare con typescript 2.0.0, ho fatto quanto segue.

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" ] } 

Ulteriori informazioni su @types con typescript 2.0.0.

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

Installa esempio:

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

Errori dell’identificatore duplicato

Questo è probabilmente dovuto al fatto che duplicazioni di ecmascript 6 sono già state importate da qualche altra parte, molto probabilmente un vecchio es6-shim.

Double check typings.d.ts assicurati che non ci siano riferimenti a es6 . Rimuovi qualsiasi riferimento a es6 dalla directory delle tue digitazioni, se ne hai uno.

Per esempio:

Ciò sarà in conflitto con i types:['core-js'] in typings.json.

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

Includere core-js tsconfig.json nell’array di tipi in tsconfig.json dovrebbe essere l’unico punto da cui viene importato.

CLI angular 1.0.0-beta.30

Se si utilizza Angular-CLI, rimuovere l’array lib in typings.json . Questo sembra essere in conflitto con la dichiarazione di core-js nei tipi.

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

Utenti Webstorm / Intellij che utilizzano la CLI angular

Assicurati che il compilatore typescript incorporato sia disabilitato. Ciò sarà in conflitto con la CLI. Per compilare il tuo typescript con la CLI puoi configurare una configurazione di ng serve .

inserisci la descrizione dell'immagine qui

Tsconfig compilerOptions lib vs types

Se si preferisce non installare le definizioni dei tipi di core js, ci sono alcune librerie es6 che vengono incluse con typescript. Quelli sono usati tramite la proprietà lib: [] in tsconfig.

Vedi qui per esempio: https://www.typescriptlang.org/docs/handbook/compiler-options.html

Nota: Se –lib non viene specificato, viene iniettata una libreria predefinita. La libreria predefinita iniettata è: ► Per –target ES5: DOM, ES5, ScriptHost ► Per –target ES6: DOM, ES6, DOM.Iterable, ScriptHost

tl; dr

Risposta breve o "lib": [ "es6", "dom" ] o "types": ["core-js"] può essere usato per risolvere can't find Promise,Map, Set and Iterator . L’utilizzo di entrambi tuttavia causerà errori di identificazione duplicati.

Ho anche lo stesso problema – “Prometto non trovato” – quando il codice vuole creare un object Promise.

Ho provato alcune soluzioni trovate su stackoverflow, incluso quello per estrarre System.config ({…}) per formare system.js e averlo incluso in index.html.

Finalmente ho risolto il problema. Il problema è che, in index.html, es6-shim.min.js è incluso. Tuttavia, in tsconfig.json, la proprietà “target” sotto “compilerOptions” ha il valore di “es5”. Dopo averlo modificato in “es6”, l’errore è scomparso.

Angolare 2 Finale

– Supporto es5 (Funziona perfettamente con TS 2.0.0 +)

Per ogni aggiornamento, es6-shim non è supportato ora, se entrambi i tipi di tip sono installati insieme es6-shim e core-js insieme. Rimuovere la es6-shim citando in tsconfig.json. È ora ansible fare riferimento core-js tipizzazione di core-js per il supporto di main.ts all’interno di main.ts

 /// 

tsconfig.json

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

- es6 suppport

Hai solo bisogno di impostare la proprietà "target" su es6 , quindi tutto andrà via. E il codice transpiled sarà in formato es6 .

Aggiornato da angular-2.0.0-rc.4

TLDR;

  1. Transpile per es6

    • l’errore va via (w / alcuni trucchi).
  2. Traspare in es5

    • installa le tipizzazioni
    • installare lo shim es6
    • assicurati che venga compilato con il tuo codice.
    • l’errore va via.

Per i lettori:

Opzione 1: trasponi in es6 o es2015

tsconfig.json:

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

Tieni presente che uglifyjs non supporta es6 al momento . Questo potrebbe influire sulla produzione di pacchetti di produzione.

Opzione 2: trasponi in es5, installa i tipi, quindi installa es6-shim:

tsconfig.json:

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

Installa i tipi, quindi installa es6-shim:

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

Se segui questo percorso, devi assicurarti che il compilatore di dattiloscritti possa trovare il file .d.ts.

Hai due opzioni:

un. Assicurati che il tuo tsconfig.json sia allo stesso livello della cartella typings.

b. Includere un riferimento nel file main.ts in cui viene avviata l’applicazione angular2.

Opzione A: assicurati che il tuo tsconfig.json sia allo stesso livello della cartella typings.

Nota: NON utilizzare il flag di esclusione per escludere la cartella typings.

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

Opzione B: riferimento nel file principale prima del bootstrap (non farlo):

Come mostrato in altre risposte, questo file non è più incluso da Angular

main.ts:

 ///  

Questo è ciò che ha funzionato per me.

controlla se esiste un file typings.json ,

Sembra qualcosa del genere,

 { "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" } } 

Installa il pacchetto di tipizzazioni a livello globale.

 sudo npm install -g typings 

dopo aver installato i tipi , esegui

 typings install 

quindi riavviare il server.

Quando hai Typescript> = 2 l’opzione “lib” in tsconfig.json farà il lavoro. Non c’è bisogno di digitazione. https://www.typescriptlang.org/docs/handbook/compiler-options.html

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

Ho avuto problemi simili in cui non riconoscevo il metodo Promise.resolve () . Ho cambiato il valore “target” da ES5 a ES6 in tsconfig.json . Questo ha risolto il problema.

Spero che questo ti aiuti.

Poiché Angular 2 è passato a RC 0, /angular2/typings/browser.d.ts non fa più parte della distribuzione Angular 2. Il file può essere installato separatamente.

Da qui: https://github.com/angular/angular/issues/8513 ci sono alcune opzioni. Quello che ha funzionato per me è stato:

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

Se si utilizza Angular2 RC1 con digitazioni v1.0 +, utilizzare il comando:

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

per installare la definizione di core-js e quindi fare riferimento al tuo indice globale nel tuo main.ts:

 ///  

Se si utilizza es6-shim o qualche altra libreria shim, installare invece i tipi per tale

Fare riferimento a https://github.com/typings/typings/issues/517

Sono riuscito a risolvere questo problema senza dover aggiungere alcun riferimento alla tripla barra al file bootstrap di TS, passare a ES6 (che porta un sacco di problemi, proprio come ha detto @DatBoi ) aggiornare i build NodeJS e / o NPM bundle di typings o installare typings globalmente.

Ecco cosa ho fatto in pochi passaggi:

  • aggiunte typings nel file package.json del progetto.
  • aggiunto un blocco di script nel file package.json per eseguire / aggiornare i typings dopo ogni azione NPM.
  • aggiunto un file typings.json nella cartella radice del progetto contenente un riferimento a core-js , che è uno dei migliori pacchetti shim / polyfill disponibili al momento per risolvere i problemi di ES5 / ES6.

Ecco come dovrebbe apparire il file package.json (solo le righe pertinenti):

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

Ed ecco il file 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 e Node non sono richiesti, ma suggerisco di tenerli nel caso in cui ne avrai bisogno in futuro).

Questa correzione funziona perfettamente con Angular2 RC1 in RC4, che è ciò di cui avevo bisogno, ma penso che risolverà anche problemi simili con altri pacchetti di librerie con abilitazione ES6.

AFAIK, penso che questo sia il modo più pulito ansible di risolverlo senza rovinare le impostazioni predefinite del VS2015.

Per maggiori informazioni e un’analisi dettagliata del problema, suggerisco anche di leggere questo post .

Ho avuto lo stesso problema durante la creazione di un object promise all’interno della mia class. Cambiando il nome del target in “es5” da “es6” ho risolto il mio problema.

Un’altra soluzione ansible è reinstallare i tipi di battitura:
Questo funziona per me per "angular2": "2.0.0-beta.15"

  1. npm clean cache
  2. npm install
  3. npm install -g typings
  4. Cancella la directory delle typings dal progetto (Directory dove sono installati i moduli di tipizzazione)
  5. typings install
  6. npm run

Un’altra buona soluzione. È necessario creare un file typings.json nella directory principale del progetto con contenuto:

 { "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" } } 

Quindi installare il pacchetto typings globale o locale, se non è installato (sono installato a livello globale):

 sudo npm install --global typings 

Nel comando di esecuzione della directory root del progetto:

 typings install 

Dopo che il problema è risolto. Non necessario per cambiare target tsconfig su es6 o es7. La tua applicazione web non supporta dopo quella vecchia versione di browser.

Ho trovato che il riferimento in boot.ts non era il percorso corretto. Aggiornare il percorso a /// risolto gli errori Promise.

Mi sto allenando con un tutorial angular2 (eroe).
Dopo aver installato @ types / core-js commentato in queste risposte, ho ricevuto un errore “Duplicate identifier”.
Nel mio caso, è stato risolto come rimuovere la linea lib in tsconfig.json.

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

Se sei venuto qui perché vedi questi errori in Visual Studio 2017, hai un problema diverso come sopra, se riesci a compilare. Questo perché il servizio di lingua non seleziona il tuo tsconfig.json.

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

Devi impostare l’azione di compilazione di tsconfig.json su “Contenuto” (clic destro -> Proprietà), quindi VS lo raccoglierà.

la mia struttura file è la seguente:

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

incolla il seguente nella parte superiore della tua app.ts e il problema risolto

 ///  

Ho avuto lo stesso problema e sono riuscito a trovarlo su github https://github.com/angular/angular-cli/issues/1901 , che indicava che si trattava di un problema con [email protected] .

Downgrade typescript a 2.0.0 sia a livello globale che localmente mi ha aiutato a risolverlo.

A livello globale:

 npm uninstall typescript -g npm cache clean npm install [email protected] -g 

A livello locale: accedi alla cartella del progetto che hai creato con ng new

 npm uninstall typescript npm cache clean npm install [email protected] 

Ho anche modificato la versione di typescript in package.json da ^2.0.0 a 2.0.0 , ma non ha funzionato fino a quando non ho eseguito il downgrade dell’installazione di typescript locale.