wake-up-neo.net

Winkel: Kann Versprechen, Karte, Satz und Iterator nicht finden

Nach der Installation von Angular erhält der TypeScript-Compiler immer wieder Fehlermeldungen, dass Promise, Map, Set und Iterator nicht gefunden werden.

Bis jetzt habe ich sie ignoriert, aber jetzt brauche ich Promise, damit mein Code funktionieren kann.

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

Die Fehler:

................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'.
165
Stav Alfi

Angular 5 mit TypeScript ^ 2.0.0

Dies sollte auch mit früheren Versionen von Angular 2+ funktionieren.

Damit dies mit TypeScript 2.0.0 funktioniert, habe ich Folgendes getan.

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

Weitere Informationen zu @types mit 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

Installationsbeispiel:

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

Duplicate Identifier-Fehler

Dies ist höchstwahrscheinlich darauf zurückzuführen, dass Duplikate von ecmascript 6 bereits von einem anderen es6-shim importiert wurden. 

Vergewissern Sie sich, dass typings.d.ts keine Verweise auf es6 enthält. Entfernen Sie ggf. einen Verweis auf es6 aus Ihrem Typisierungsverzeichnis. 

Zum Beispiel:

Dies steht in Konflikt mit types:['core-js'] in typings.json.

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

Das Einfügen von core-js in das Types-Array in tsconfig.json sollte der einzige Ort sein, aus dem es importiert wird. 

Angular CLI 1.0.0-beta.30

Wenn Sie die Angular-CLI verwenden, entfernen Sie das lib-Array in typings.json. Dies scheint in Konflikt mit der Deklaration von Core-js in Typen zu stehen.

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

Webstorm/Intellij-Benutzer, die die Angular-CLI verwenden

Stellen Sie sicher, dass der integrierte TypeScript-Compiler deaktiviert ist. Dies steht in Konflikt mit der CLI. Um Ihr TypeScript mit der CLI zu kompilieren, können Sie eine ng serve-Konfiguration einrichten.

 enter image description here

Tsconfig compilerOptions lib vs types

Wenn Sie keine Core-Js-Typdefinitionen installieren möchten, gibt es einige es6-Bibliotheken, die in TypeScript enthalten sind. Diese werden über die lib: []-Eigenschaft in tsconfig verwendet. 

Siehe hier zum Beispiel: https://www.typescriptlang.org/docs/handbook/compiler-options.html

Hinweis: Wenn --lib nicht angegeben ist, wird eine Standardbibliothek injiziert. Das Die eingebaute Standardbibliothek lautet: ► Für - Ziel ES5: DOM, ES5, ScriptHost ► Für - Ziel ES6: DOM, ES6, DOM.Iterable, ScriptHost

tl; dr 

Kurze Antwort Zur Auflösung von "lib": [ "es6", "dom" ] kann entweder "types": ["core-js"] oder can't find Promise,Map, Set and Iterator verwendet werden. Die Verwendung beider führt jedoch zu doppelten Identifizierungsfehlern.

172
Kris Hollenbeck

Ich habe auch das gleiche Problem - "Promise not found" - wenn der Code ein Promise-Objekt erstellen möchte.

Ich habe eine Lösung aus Stackoverflow ausprobiert, einschließlich der zum Entfernen von System.config ({...}) in system.js und zur Aufnahme in index.html.

Endlich habe ich das Problem gelöst. Das Problem ist, dass in index.html es6-shim.min.js enthalten ist. In "tsconfig.json" hat die Eigenschaft "target" unter "compilerOptions" jedoch den Wert "es5". Nachdem ich es auf "es6" geändert habe, ist der Fehler weg.

75
Daniel C. Deng

Winkel 2 Finale

- es5-Unterstützung (Funktioniert perfekt mit TS 2.0.0 +)

Pro Update wird es6-shim jetzt nicht unterstützt, wenn beide Typen es6-shim und core-js zusammen installiert sind. Entfernen Sie es6-shim durch Eingabe in tsconfig.json. Sie könnten sich jetzt auf core-js beziehen, der für es5-Unterstützung in main.ts eingibt.

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

- es6 Unterstützung

Sie müssen nur die "target"-Eigenschaft auf es6 setzen, dann gehen alle Fehler weg. Und der transpiled Code wird im es6 Format vorliegen.

63
Pankaj Parkar

Aktualisiert am Winkel-2.0.0-rc.4

TLDR;

  1. Transpile nach es6

    • fehler verschwindet (mit einigen Gotchas).
  2. Transpile nach es5 

    • installieren Sie Typisierungen 
    • installieren Sie die Es6-Einstellscheibe
    • stellen Sie sicher, dass es mit Ihrem Code kompiliert wird.
    • fehler geht weg.

Für die Leser:

Option 1: Transpile nach Es6 oder Es2015

tsconfig.json:

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

Denken Sie daran, dass uglifyjs es6 zurzeit nicht unterstützt . Dies kann Auswirkungen auf die Erstellung von Produktionspaketen haben.

Option 2: Transpile nach Es5, Installation von Typisierungen und Installation des Es6-Shims:

tsconfig.json:

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

Installieren Sie Typisierungen und dann es6-shim:

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

Wenn Sie diese Route wählen, müssen Sie sicherstellen, dass der TypeScript-Compiler die Datei .d.ts finden kann. 

Sie haben zwei Möglichkeiten:

ein. Stellen Sie sicher, dass sich Ihre Datei tsconfig.json auf dem gleichen Niveau befindet wie der Typisierungsordner.

b. Fügen Sie einen Verweis in Ihre main.ts-Datei ein, in der Ihre angle2-Anwendung bootstrapped ist.

Option A: Stellen Sie sicher, dass sich Ihre Datei tsconfig.json auf dem gleichen Niveau befindet wie der Typisierungsordner.

Hinweis: Verwenden Sie NICHT das Ausschlussflag, um den Typisierungsordner auszuschließen.

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

Option B: Referenz in der Hauptdatei vor dem Bootstrap (tun Sie dies nicht):

Wie in anderen Antworten gezeigt, ist diese Datei nicht mehr von Angular enthalten

main.ts:

/// <reference path="../../typings/globals/es6-shim/index.d.ts" />
42
Nick Acosta

Wenn TypeScript> = 2 ist, wird die Option "lib" in tsconfig.json ausgeführt. Keine Notwendigkeit für Typings. https://www.typescriptlang.org/docs/handbook/compiler-options.html

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

Das hat bei mir funktioniert.

prüfen, ob einetypings.json-Datei existiert 

Es sieht so aus,

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

Installieren Sie das Typisierungspaket global.

Sudo npm install -g typings

nach der Installation von typings , ausführen

typings install

starten Sie anschließend den Server neu.

8

Ich hatte ein ähnliches Problem, bei dem die Methode Promise.resolve () nicht erkannt wurde. Ich habe"target"value von ES5 zu ES6 in tsconfig.json geändert. Das hat das Problem gelöst.

Hoffe das hilft.

6

Da Angular 2 auf RC 0 umgestiegen ist, ist /angular2/typings/browser.d.ts nicht mehr Bestandteil der Angular 2-Verteilung. Die Datei kann separat installiert werden. 

Von hier aus: https://github.com/angular/angular/issues/8513 gibt es einige Möglichkeiten. Die, die für mich gearbeitet hat, war:

typings install es6-shim --ambient --save

// In your app.ts
/// <reference path="typings/browser.d.ts" />
5
James

Ich habe es geschafft, dieses Problem zu beheben, ohne der TS-Bootstrap-Datei einen dreifachen Schrägstrich hinzufügen zu müssen. Wechseln Sie zu ES6 (was eine Reihe von Problemen mit sich bringt, genauso wie @DatBoi said). Aktualisieren Sie VS2015 NodeJS und/oder NPM erstellt oder installiert typings global.

Folgendes habe ich in wenigen Schritten gemacht:

  • typings wurde in die package.json-Datei des Projekts eingefügt.
  • fügte einen script-Block in die package.json-Datei ein, um typings nach jeder NPM-Aktion auszuführen/zu aktualisieren.
  • fügte eine typings.json-Datei im Stammordner des Projekts hinzu, die einen Verweis auf core-js enthält. Dies ist eines der besten Shim/Polyfill-Pakete, das derzeit verfügbar ist, um Probleme mit ES5/ES6 zu beheben.

So sollte die package.json-Datei aussehen (nur relevante Zeilen):

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

Und hier ist die typings.json-Datei:

{
  "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 und Node sind nicht erforderlich, aber ich empfehle, sie für den Fall aufzubewahren, dass Sie dies in der Zukunft tun müssen).

Dieses Update funktioniert gut mit Angular2 RC1 bis RC4, was ich brauchte, aber ich denke, es wird auch ähnliche Probleme mit anderen ES6-fähigen Bibliothekspaketen beheben.

AFAIK, ich denke, dies ist die sauberste Möglichkeit, das Problem zu beheben, ohne die Standardeinstellungen des VS2015 zu beeinträchtigen.

Für weitere Informationen und eine detaillierte Analyse des Problems schlage ich auch vor, diesen Beitrag zu lesen in meinem Blog.

3
Darkseal

Wenn Sie Angular2 RC1 mit Typisierung v1.0 + verwenden, verwenden Sie den Befehl:

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

um die core-js-Definition zu installieren und anschließend in Ihrem main.ts auf Ihren globalen Index zu verweisen:

/// <reference path="../../../typings/index.d.ts" />

Wenn Sie es6-shim oder eine andere Shim-Bibliothek verwenden, installieren Sie stattdessen die Typisierung

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

3
Simon Trewhella

Wenn Sie hierher gekommen sind, weil Sie diese Fehler in Visual Studio 2017 sehen, haben Sie ein anderes Problem als oben, wenn Sie das Kompilieren erfolgreich durchführen. Dies liegt daran, dass der Sprachendienst Ihre tsconfig.json nicht auswählt.

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

Sie müssen die Build-Aktion Ihrer tsconfig.json auf "Content" (Rechtsklick -> Eigenschaften) setzen, dann wird VS sie abholen.

1
Jopnert

Eine andere gute Lösung ... Sie müssen eine Datei typings.json im Stammverzeichnis des Projekts mit Inhalt erstellen:

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

Dann installiere globales oder lokales Typisierungspaket, falls es nicht installiert ist (ich installiere es global):

Sudo npm install --global typings

Führen Sie im Projektstammverzeichnis den Befehl aus:

typings install

Danach ist das Problem gelöst. Nicht erforderlich, um das Ziel von tsconfig in es6 oder es7 zu ändern. Ihre Webanwendung unterstützt danach keine ältere Version von Browsern.

1

Ich hatte ein ähnliches Problem beim Erstellen eines Versprechungsobjekts in meiner Klasse. Durch Ändern des Zielnamens in "es5" von "es6" wurde mein Problem gelöst.

1
CharithW

Ich habe festgestellt, dass diese Probleme nach einem Upgrade von Angular 5 auf Angular 6 auftauchten. Ich konnte das Problem beheben, indem ich in VS2017 Folgendes tat:

  • Stellen Sie sicher, dass das TypeScript-SDK (über das Visual Studio-Installationsprogramm) für meine bestimmte Version von TypeScript 2.9 installiert wurde
  • Stellen Sie sicher, dass die Projekteigenschaft Modulsystem mit der in meiner Datei tsconfig.json: ES2015 übereinstimmt. Dies ist häufig automatisch synchron, wenn sich die Datei tsconfig im Stammverzeichnis des Projekts befindet. Da ich jedoch die VS Angular-Vorlage verwendet habe, werden diese Dateien in einem "ClientApp" -Unterordner abgelegt, und die Projekteigenschaft Module System wurde nicht festgelegt.

 VS2017 Project Properties

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": "./"
  }
}
1
dasch88

Eine andere mögliche Lösung ist die Neuinstallation von Typisierungen:
.__ das funktioniert für mich für "angular2": "2.0.0-beta.15" 

  1. npm clean cache
  2. npm install
  3. npm install -g typings
  4. typings Verzeichnis aus dem Projekt löschen (Verzeichnis, in dem Typisierungsmodule installiert sind)
  5. typings install
  6. npm run
1
Vicky Gonsalves

Ich trainiere mit einem angle2-Tutorial (Held) .
Nach der Installation von @ types/core-js, die in diesen Antworten kommentiert wurde, erhielt ich die Fehlermeldung "Duplicate Identifier".
In meinem Fall wurde die lib-Zeile in tsconfig.json entfernt.

// "lib": ["es2015", "dom"]

0
coffeenjava

Ich fand, dass der Verweis in boot.ts nicht der richtige Pfad war. Durch Aktualisieren dieses Pfads auf /// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" /> wurden die Versprechenfehler behoben.

0
dawesome