Angular: Promise, Map, Set und Iterator können nicht gefunden werden

176

Nach der Installation von Angular, einige Fehler über nicht finden , das Typoskript Compiler erhalte immer Promise, Map, SetundIterator .

Bis jetzt habe ich sie ignoriert, aber jetzt brauche ich sie, Promisedamit 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'.
Stav Alfi
quelle
1
Installieren Sie die neueste Version von TypeScript für Visual Studio 2015 .
Mylesk

Antworten:

177

Winkel 5 mit Typoskript ^ 2.0.0

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

Damit dies mit Typoskript 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 Typoskript 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

Doppelte Bezeichnerfehler

Dies ist höchstwahrscheinlich darauf zurückzuführen, dass doppelte Ecmascript 6-Typisierungen bereits von einem anderen Ort importiert werden, höchstwahrscheinlich von einem alten es6-Shim.

Stellen Sie typings.d.tssicher, dass keine Verweise auf vorhanden sind es6. Entfernen Sie alle Verweise auf es6aus Ihrem Schreibverzeichnis, falls Sie eines haben.

Beispielsweise:

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

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

Einschließlich core-jsin das Typenarray intsconfig.json sollte der einzige Ort sein, von 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 im Widerspruch zur 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 Typenskript-Compiler deaktiviert ist. Dies steht in Konflikt mit der CLI. Um Ihr Typoskript mit der CLI zu kompilieren, können Sie eine ng serveKonfiguration einrichten.

Geben Sie hier die Bildbeschreibung ein

Tsconfig compilerOptions lib vs types

Wenn Sie keine Core-JS-Typdefinitionen installieren möchten, sind einige ES6-Bibliotheken im Lieferumfang von Typoskript enthalten. 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 eingefügt. Die eingefügte Standardbibliothek lautet: ► Für --target ES5: DOM, ES5, ScriptHost ► Für --target ES6: DOM, ES6, DOM.Iterable, ScriptHost

tl; dr

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

Kris Hollenbeck
quelle
1
Danke für das Update und die gute Antwort. Ich habe Ihre Antwort akzeptiert, weil die Leute, die immer noch hierher kommen, um diesen Fehler zu beheben, bis jetzt verschwunden sind. Gibt es eine Chance, dass Sie Ihre Antwort auf RC 5 aktualisieren? Ich bin mit diesem Fehler konfrontiert und konnte Ihrer Antwort folgen. Ich konnte Versprechen verwenden, aber jetzt gibt es viele Fehler in der Datei node_modules \ @types \ es6-shim \ index.d.ts: "Doppelte Kennung 'PropertyKey'." in Zeilen: 6,10,248,283,290 usw.; auch Fehler in: C: \ Benutzer \ armeTik \ Desktop \ rc5 \ store-app-02 \ Knotenmodule \ Typoskript \ lib \ lib.es2015.core.d.ts: 17 : 13 Doppelte Kennung 'PropertyKey'.
Stav Alfi
Ich habe meine Antwort aktualisiert. Hoffentlich hilft das, die Dinge ein bisschen aufzuklären. Dies sollte meiner Meinung nach für RC5 und RC4 gleich sein.
Kris Hollenbeck
Ich habe es auch geändert, um nur Core-Js wiederzugeben, damit es hoffentlich weniger verwirrend ist. core-js und es6 sind beide für es6-spezifische Typdeklarationen. Ich bevorzuge Core-Js, da es mehr als das Es6-Shim abzudecken scheint.
Kris Hollenbeck
Danke für das Update. Diesmal hatte ich kein Glück. Ich habe meine aktuellen Fehler aktualisiert.
Stav Alfi
2
Wahrscheinlich ist lib die bessere Lösung. github.com/angular/angular/blob/…
Alex
75

Ich habe auch das gleiche Problem - "Versprechen nicht gefunden" - wenn der Code ein Versprechen-Objekt erstellen möchte.

Es wurde versucht, eine Lösung für stackoverflow zu finden, einschließlich der Lösung, mit der System.config ({...}) entfernt wird, um system.js zu bilden und in index.html aufzunehmen.

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 in "es6" geändert habe, ist der Fehler verschwunden.

Daniel C. Deng
quelle
2
Dies war auch für mich das Problem. Weiß jemand, warum dies diesen Fehler verursachen würde?
Nick Brady
Es wurden auch Fehler
behoben
5
Der js-Code muss jedoch in es5 transpiliert werden, da nicht alle Browser für es6 bereit sind. Hat jemand es6 Probleme in verschiedenen Browsern. Danke!
Bmnepali
funktioniert bei mir auf angle2.1.0. Compiler 2.1.0 Core 2.1.0 common2.1.0 rxjs5.0.0-beta.12 Plattform-Browser2.1.0
Farhad Goodarzi
Danke dir! Sie haben mir viel Zeit gespart
Cristian Traìna
63

Winkel 2 Finale

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

Pro Update es6-shimwird jetzt nicht unterstützt, wenn Sie beide Typisierungen zusammen es6-shimund core-jszusammen installiert haben . Entfernen Sie die es6-shimEingabe, indem Sie in tsconfig.json erwähnen. Sie können sich jetzt unten auf die core-jsEingabe beziehen, um es5Unterstützung im Inneren zu erhaltenmain.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"
]

- es6 unterstützt

Sie müssen nur die "target"Eigenschaft auf setzen es6, dann werden alle Fehler verschwinden. Und der transpilierte Code wird im es6Format sein.

Pankaj Parkar
quelle
Vielen Dank. Ich hatte keine Chance, das alleine zu finden.
Stav Alfi
@StavAlfi np .. das passiert .. Ich bin froh, Ihnen zu helfen .. Danke :)
Pankaj Parkar
Mit Beta.7 sollte es installiert werden, wenn Sie das Projekt-Setup im Schnellstart-Tutorial verwenden. Welche Beta von Angular verwenden Sie? Ich bestätige die brechende Änderung mit Winkel 2.0.0 Beta.7
Marc
1
Die Datei package.json im Schnellstart-Tutorial unterstützt die aktuelle Version von Angular 2. Wenn Sie package.json kopieren. tscconfig.json und typings.json in Ihr Projektstammverzeichnis und rufen Sie npm -install auf. Das Projekt-Setup ist in Ordnung.
Marc
3
@PankajParkar 2.0.0-rc.1. Ich habe erst vor ein paar Tagen angefangen, Angular zu verwenden. Ich habe über die Einstiegsdokumente [hier] () gearbeitet. In den package.jsonsetzten sie "angular2-in-memory-web-api": "0.0.7"und der Rest der Winkel Zeug kommt von "@angular/<module>": "2.0.0-rc.1"wo <module>ist common, compiler, core, http, platform-browser, platform-browser-dynamic, router, router-deprecatedund upgrade.
Hector
42

Aktualisiert ab Angular-2.0.0-rc.4

TLDR;

  1. Transpile zu es6

    • Fehler verschwindet (mit einigen Fallstricken).
  2. Transpile zu es5

    • Typisierungen installieren
    • Installieren Sie die es6-Unterlegscheibe
    • Stellen Sie sicher, dass es mit Ihrem Code kompiliert wird.
    • Fehler verschwindet.

Für die Leser:

Option 1: Transpile auf es6 oder es2015

tsconfig.json:

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

Beachten Sie, dass uglifyjs es6 derzeit nicht unterstützt . Dies kann sich auf die Erstellung von Produktionspaketen auswirken.

Option 2: Transpilieren Sie zu es5, installieren Sie Typisierungen und installieren Sie dann das es6-shim:

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 diesen Weg gehen, müssen Sie sicherstellen, dass der Typoskript-Compiler die .d.ts-Datei finden kann.

Sie haben zwei Möglichkeiten:

ein. Stellen Sie sicher, dass sich Ihre Datei tsconfig.json auf derselben Ebene befindet wie der Ordner typings.

b. Fügen Sie eine Referenz in Ihre main.ts-Datei ein, in der Ihre angle2-Anwendung gebootet wird.

Option A: Stellen Sie sicher, dass sich Ihre Datei tsconfig.json auf derselben Ebene befindet wie der Eingabeordner.

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

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

Option B: Referenz in der Hauptdatei vor dem Bootstrap (nicht ausführen):

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

main.ts:

/// <reference path="../../typings/globals/es6-shim/index.d.ts" />
Nick Acosta
quelle
2
Option 1 funktioniert perfekt für RC4. Stellen Sie sicher, dass Sie Core-Js und andere Typisierungen entfernen, die Promise, Map usw. bereitstellen, um Namespace-Konflikte zu vermeiden.
wtfzn
1
Danke, ich habe gearbeitet. Benötigen Sie entweder Core-Js oder Es6-Shim (nicht beide). Fügen Sie dann ./typings/index.d.ts in Ihren ts-Kompilierungsprozess ein.
k3a
1
--saveDevfunktioniert momentan nicht. --save-devtut.
George Sovetov
1
Sollte nicht typingsglobal installiert werden?
George Sovetov
8

Das hat bei mir funktioniert.

Überprüfen Sie, ob eine typings.jsonDatei vorhanden ist.

Es sieht ungefähr 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

Führen Sie nach der Installation der Typisierungen aus

typings install

Starten Sie dann den Server neu.

Alles ist gut
quelle
6

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

Hoffe das hilft.

Nandakumar Purohit
quelle
Ja, das hat mir auf jeden Fall geholfen - der "Ziel" -Wert wurde in tsconfig.json von ES5 auf ES6 geändert.
Greg Trevellick
5

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

Von hier aus: https://github.com/angular/angular/issues/8513 gibt es einige Optionen. Derjenige, der für mich arbeitete, war:

typings install es6-shim --ambient --save

// In your app.ts
/// <reference path="typings/browser.d.ts" />
James
quelle
1
Vielen Dank dafür, aber der Befehl für die Eingabe 1.0+ lautet: typings installiere dt ~ es6-shim --save --global ( github.com/typings/typings/issues/517 ) und verwende dann /// <reference path = " typings / es6-shim / es6-shim.d.ts "/>
Simon Trewhella
3

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

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

So installieren Sie die core-js-Definition und verweisen dann auf Ihren globalen Index in Ihrer main.ts:

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

Wenn Sie es6-shim oder eine andere Shim-Bibliothek verwenden, installieren Sie stattdessen Typisierungen dafür

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

Simon Trewhella
quelle
3

Ich habe es geschafft, dieses Problem zu beheben, ohne einen Triple-Slash-Verweis auf die TS-Bootstrap-Datei hinzufügen zu müssen. Wechseln Sie zu ES6 (was, wie @DatBoi sagte, eine Reihe von Problemen mit sich bringt ), aktualisieren Sie VS2015s NodeJSund / oder NPMgebündelte Builds oder installieren Sie sietypings global.

Folgendes habe ich in wenigen Schritten getan:

  • typingsin der Projektdatei hinzugefügt package.json.
  • scriptDer package.jsonDatei wurde ein Block hinzugefügt , der typingsnach jeder NPM-Aktion ausgeführt / aktualisiert werden soll.
  • Es wurde eine typings.jsonDatei im Stammordner des Projekts hinzugefügt, die einen Verweis auf enthält. core-jsDies ist eines der derzeit besten Shim / Polyfill-Pakete, um ES5 / ES6-Probleme zu beheben.

So sollte die package.jsonDatei 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.jsonDatei:

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

( JasmineundNode sind nicht erforderlich, aber ich schlage vor, sie für den Fall aufzubewahren, dass Sie sie in Zukunft benötigen).

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 von VS2015 zu verfälschen.

Für weitere Informationen und eine detaillierte Analyse des Problems empfehle ich außerdem, diesen Beitrag in meinem Blog zu lesen .

Darkseal
quelle
2

Ich habe festgestellt, dass diese Probleme nach dem Upgrade von Angular 5 auf Angular 6 auftreten. Ich konnte dies 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 des Modulsystems so eingestellt ist, dass sie mit der in meiner Datei tsconfig.json: ES2015 übereinstimmt. Dies wird häufig automatisch synchronisiert, wenn sich die tsconfig-Datei im Stammverzeichnis des Projekts befindet. Da ich jedoch die VS Angular-Vorlage verwendet habe, werden diese Dateien in einem Unterordner "ClientApp" abgelegt, und die Projekteigenschaft "Modulsystem" wurde nicht festgelegt.

VS2017 Projekteigenschaften

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

Ich hatte das gleiche Problem beim Erstellen eines Versprechensobjekts in meiner Klasse. Durch Ändern des Zielnamens in "es5" von "es6" wurde mein Problem gelöst.

CharithW
quelle
1

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

  1. npm clean cache
  2. npm install
  3. npm install -g typings
  4. Delete - typingsVerzeichnis aus Projekt (Verzeichnis wwhere Typisierungen Module installiert ist)
  5. typings install
  6. npm run
Vicky Gonsalves
quelle
1

Eine weitere gute Lösung. Sie müssen eine Datei typings.json im Stammverzeichnis des Projekts mit folgendem 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 installieren Sie das globale oder lokale Typisierungspaket, falls es nicht installiert ist (ich installiere es global):

sudo npm install --global typings

Führen Sie im Projektstammverzeichnis den folgenden Befehl aus:

typings install

Danach ist das Problem gelöst. Nicht erforderlich, um das tsconfig-Ziel in es6 oder es7 zu ändern. Ihre Webanwendung unterstützt danach einige alte Browserversionen nicht mehr.

Alexey Nikitenko
quelle
1

Wenn Sie hierher gekommen sind, weil Sie diese Fehler in Visual Studio 2017 sehen, haben Sie ein anderes Problem als oben, wenn Sie erfolgreich kompilieren können. Dies liegt daran, dass der Sprachdienst Ihre Datei 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 Datei tsconfig.json auf "Inhalt" setzen (Rechtsklick -> Eigenschaften), dann nimmt VS sie auf.

Pieter Van Winckel
quelle
0

Ich fand die Referenz in boot.ts nicht der richtige Pfad. Aktualisieren dieses Pfads, /// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />um die Promise-Fehler zu beheben.

großartig
quelle
0

Ich trainiere mit einem Angular2-Tutorial (Held).
Nach der Installation von @ types / core-js, die in diesen Antworten kommentiert wurden, wurde der Fehler "Doppelte Kennung" angezeigt.
In meinem Fall wurde das Entfernen der lib-Zeile in tsconfig.json gelöst.

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

Kaffeejava
quelle
-1

Meine Dateistruktur ist wie folgt:

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

Fügen Sie das Folgende oben in Ihre app.ts ein und Ihr Problem ist gelöst

/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />
Matey Aryeh
quelle
Das Ändern des TARGET-Eintrags in ES6 in der Datei tsconfig.json hat dieses Problem für mich behoben, wie in einigen der obigen Antworten angegeben.
TheCopyPaster
-1

Ich habe das gleiche Problem und kann es in github https://github.com/angular/angular-cli/issues/1901 finden, in dem angegeben ist , dass es sich um ein Problem handelt [email protected].

Das Downgrade von Typoskript auf 2.0.0global und lokal hat mir geholfen, es zu beheben.

Global:

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

Lokal: Gehen Sie in den Projektordner, den Sie mit ng new erstellt haben

npm uninstall typescript
npm cache clean
npm install typescript@2.0.0

Ich habe auch die Version von Typoskript in package.json von ^2.0.0auf geändert 2.0.0, aber es hat nicht funktioniert, bis ich die lokale Typoskript-Installation heruntergestuft habe.

Wasserwagen
quelle
Warum stimmen die Leute das ab? Ich würde gerne wissen, warum das eine schlechte Idee ist. Wenn Typoskript eine transpilierte Sprache ist und in Javascript konvertiert wird, ist es nur so sicher wie Ihr Browser, sodass kein Risiko besteht, oder?
user3505901