Angular: nie można znaleźć obietnicy, mapy, zestawu i iteratora

176

Po zainstalowaniu Angulara kompilator Typescript wciąż otrzymuje błędy związane z brakiem znalezienia Promise , Map, Seti Iterator.

Do tej pory je ignorowałem, ale teraz potrzebuję, Promiseaby mój kod mógł działać.

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

Błędy:

................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
źródło
1
Zainstaluj najnowszą wersję języka TypeScript dla programu Visual Studio 2015 .
mylesk,

Odpowiedzi:

177

Angular 5 z maszynopisem ^ 2.0.0

Powinno to również działać tak samo z wcześniejszymi wersjami Angular 2+.

Aby to działało z maszynopisem 2.0.0, wykonałem następujące czynności.

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

Więcej o @types z maszynopisem 2.0.0.

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

Przykład instalacji:

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

Powielone błędy identyfikatorów

Jest to najprawdopodobniej spowodowane tym, że zduplikowane typy ecmascript 6 są już importowane z innego miejsca, najprawdopodobniej stara podkładka es6-shim.

Dokładnie sprawdź, typings.d.tsczy nie ma odniesień do es6. Usuń wszelkie odniesienia do es6z katalogu typings, jeśli takie masz.

Na przykład:

Spowoduje to konflikt z types:['core-js']w typings.json.

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

Uwzględnianie core-jsw tablicy typów wtsconfig.json powinno być jedynym miejscem, z którego jest importowany.

Angular CLI 1.0.0-beta.30

Jeśli używasz Angular-CLI, usuń tablicę lib w typings.json. Wydaje się, że jest to sprzeczne z deklarowaniem core-js w typach.

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

Użytkownicy Webstorm / Intellij korzystający z Angular CLI

Upewnij się, że wbudowany kompilator skryptu jest wyłączony. Spowoduje to konflikt z CLI. Aby skompilować swój maszynopis z CLI, możesz skonfigurować ng servekonfigurację.

wprowadź opis obrazu tutaj

Tsconfig compilerOptions lib vs types

Jeśli wolisz nie instalować podstawowych definicji typu js, istnieje kilka bibliotek es6 dołączonych do maszynopisu. Są one używane przez lib: []właściwość w tsconfig.

Zobacz na przykład: https://www.typescriptlang.org/docs/handbook/compiler-options.html

Uwaga: Jeśli --lib nie jest określone, wstrzykiwana jest domyślna biblioteka. Domyślna wstrzyknięta biblioteka to: ► For --target ES5: DOM, ES5, ScriptHost ► For --target ES6: DOM, ES6, DOM.Iterable, ScriptHost

tl; dr

Krótka odpowiedź albo "lib": [ "es6", "dom" ]czy "types": ["core-js"]mogą być wykorzystane, aby rozwiązać can't find Promise,Map, Set and Iterator. Jednak użycie obu spowoduje powielenie błędów identyfikatorów.

Kris Hollenbeck
źródło
1
Dzięki za aktualizację i dobrą odpowiedź. Przyjąłem twoją odpowiedź, ponieważ ludzie wciąż tu przychodzą, aby usunąć ten błąd, aż do teraz. Czy jest jakaś szansa, że ​​zaktualizujesz swoją odpowiedź do RC 5? Mam do czynienia z tym błędem i podążając za twoją odpowiedzią, mogłem użyć obietnicy, ale teraz jest wiele błędów z pliku node_modules \ @types \ es6-shim \ index.d.ts: "Zduplikowany identyfikator 'PropertyKey'." w wierszach: 6,10 248,283,290 i tak dalej; .. również błąd w: C: \ Users \ armyTik \ Desktop \ rc5 \ store-app-02 \ node_modules \ typescript \ lib \ lib.es2015.core.d.ts: 17 : 13 Powielony identyfikator „PropertyKey”.
Stav Alfi
Zaktualizowałem odpowiedź. Mam nadzieję, że pomoże to trochę wyjaśnić. Uważam, że powinno to być takie samo dla RC5 i RC4.
Kris Hollenbeck,
Zmieniłem go również, aby odzwierciedlał tylko core-js, więc mam nadzieję, że jest mniej zagmatwany. core-js i es6 są przeznaczone dla specyficznych deklaracji typu es6. Wolę core-js, ponieważ wydaje się, że obejmuje więcej niż es6-shim.
Kris Hollenbeck
Dziękuję za aktualizację. Tym razem nie miałem szczęścia. Zaktualizowałem swoje aktualne błędy.
Stav Alfi,
2
Prawdopodobnie lib jest lepszym rozwiązaniem. github.com/angular/angular/blob/…
Alex
75

Mam też ten sam problem - „Nie znaleziono Promise” - gdy kod chce utworzyć obiekt Promise.

Wypróbowałem rozwiązanie znalezione w stackoverflow, w tym rozwiązanie polegające na wyjęciu System.config ({...}) w celu utworzenia systemu.js i umieszczeniu go w pliku index.html.

Wreszcie rozwiązałem problem. Problem polega na tym, że plik index.html zawiera es6-shim.min.js. Jednak w pliku tsconfig.json właściwość „target” w obszarze „compilerOptions” ma wartość „es5”. Po zmianie na „es6” błąd zniknął.

Daniel C. Deng
źródło
2
To był również problem dla mnie. Czy ktoś wie, dlaczego spowodowałoby to ten błąd?
Nick Brady
Naprawiono również błędy, które otrzymałem w IntelliJ IDEA / WebStorm
bentolor
5
Ale kod js musi zostać przetransponowany do es5, ponieważ nie wszystkie przeglądarki są gotowe na es6. Czy ktoś ma problemy z es6 w różnych przeglądarkach. Dziękuję!
bmnepali
działa u mnie na angular2.1.0. kompilator 2.1.0 rdzeń 2.1.0 wspólny 2.1.0 rxjs5.0.0-beta.12 przeglądarka-platformy 2.1.0
farhad goodarzi
Dziękuję Ci! Zaoszczędziłeś mi dużo czasu
Cristian Traìna
63

Angular 2 Final

- obsługa es5 (działa doskonale z TS 2.0.0 +)

es6-shimKażda aktualizacja nie jest teraz obsługiwana, jeśli masz zainstalowane oba typy razem es6-shimi core-jsrazem. Usuń es6-shimwpisywanie, wspominając w tsconfig.json. Możesz teraz odnieść się poniżej, core-jswpisując es5wsparcie w środkumain.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"
]

- wsparcie es6

Wystarczy ustawić "target"właściwość na es6, wtedy wszystkie błędy znikną. Kod przetransponowany będzie w es6formacie.

Pankaj Parkar
źródło
Dziękuję Ci bardzo. Nie miałem szans znaleźć tego na własną rękę.
Stav Alfi
@StavAlfi np .. tak się dzieje .. Cieszę się, że
mogłem
W przypadku wersji beta.7 należy ją zainstalować, jeśli używasz konfiguracji projektu w samouczku Szybki start. Której wersji beta Angular używasz? Potwierdzam przełomową zmianę za pomocą kątowej wersji 2.0.0 beta.7
Marc
1
Plik package.json w samouczku szybkiego startu obsługuje aktualną wersję angular 2. Jeśli skopiujesz plik package.json. tscconfig.json i typings.json do katalogu głównego projektu i wywołaj npm -install Konfiguracja projektu będzie w porządku.
Marc
3
@PankajParkar 2.0.0-rc.1. Zacząłem używać Angulara dopiero kilka dni temu. Pracowałem mimo początkowej dokumentacji [tutaj] (). W package.jsonwłożyli "angular2-in-memory-web-api": "0.0.7"a reszta pochodzi z kątowym rzeczy "@angular/<module>": "2.0.0-rc.1"gdzie <module>jest common, compiler, core, http, platform-browser, platform-browser-dynamic, router, router-deprecatedi upgrade.
Hector
42

Zaktualizowano od Angular-2.0.0-rc.4

TLDR;

  1. Transpile do es6

    • błąd znika (z pewnymi problemami).
  2. Transpile do es5

    • zainstaluj typy
    • zainstaluj podkładkę ES6
    • upewnij się, że kompiluje się z Twoim kodem.
    • błąd znika.

Dla czytelników:

Opcja 1: Transpile do es6 lub es2015

tsconfig.json:

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

Pamiętaj, że uglifyjs nie obsługuje obecnie es6 . Może to wpłynąć na tworzenie pakietów produkcyjnych.

Opcja 2: Transpile do es5, zainstaluj typy, a następnie zainstaluj podkładkę es6:

tsconfig.json:

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

Zainstaluj typy, a następnie zainstaluj podkładkę es6-shim:

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

Jeśli wybierzesz tę trasę, musisz upewnić się, że kompilator maszynopisu może znaleźć plik .d.ts.

Masz dwie możliwości:

za. Upewnij się, że plik tsconfig.json znajduje się na tym samym poziomie, co folder typings.

b. Dołącz odwołanie do pliku main.ts, w którym ładowana jest aplikacja angular2.

Opcja A: Upewnij się, że plik tsconfig.json znajduje się na tym samym poziomie, co folder typings.

Uwaga: NIE używaj flagi wykluczenia, aby wykluczyć folder typów.

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

Opcja B: Odwołanie w głównym pliku przed bootstrapem (nie rób tego):

Jak pokazano w innych odpowiedziach, ten plik nie jest już uwzględniany przez Angular

main.ts:

/// <reference path="../../typings/globals/es6-shim/index.d.ts" />
Nick Acosta
źródło
2
Opcja 1 działa doskonale w przypadku RC4. Upewnij się, że usunąłeś core-js i inne typy, które zapewniają Promise, Map itp., Aby uniknąć konfliktów przestrzeni nazw.
wtfzn
1
Dzięki, pracowałem. Potrzebujesz core-js lub es6-shim (nie obu). A następnie dołącz ./typings/index.d.ts do procesu kompilacji ts.
k3a
1
--saveDevna razie nie działa. --save-devrobi.
George Sovetov
1
Nie powinno typingsbyć instalowane globalnie?
George Sovetov
8

To właśnie zadziałało dla mnie.

sprawdzić, czy istnieje typings.jsonplik,

Wygląda mniej więcej tak,

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

Zainstaluj pakiet typów na całym świecie.

sudo npm install -g typings

po zainstalowaniu typów uruchom

typings install

następnie zrestartuj serwer.

Wszystko jest Vаиітy
źródło
6

Miałem podobny problem, gdy nie rozpoznawałem metody Promise.resolve () . Zmieniłem wartość „target” z ES5 na ES6 w tsconfig.json . To rozwiązało problem.

Mam nadzieję że to pomoże.

Nandakumar Purohit
źródło
Tak, to pomogło mi na pewno - zmieniono wartość „target” z ES5 na ES6 w tsconfig.json.
Greg Trevellick
5

Ponieważ Angular 2 przeszedł do RC 0, /angular2/typings/browser.d.ts nie jest już częścią rozkładu Angular 2. Plik można zainstalować osobno.

Stąd: https://github.com/angular/angular/issues/8513 jest kilka opcji. Ten, który działał dla mnie, to:

typings install es6-shim --ambient --save

// In your app.ts
/// <reference path="typings/browser.d.ts" />
James
źródło
1
Dzięki za to, ale polecenie do wpisywania 1.0+ to: typings install dt ~ es6-shim --save --global ( github.com/typings/typings/issues/517 ), a następnie użyj /// <ścieżka odniesienia = " typings / es6-shim / es6-shim.d.ts "/>
Simon Trewhella
4

Udało mi się naprawić ten problem bez konieczności dodawania jakiegokolwiek odniesienia z potrójnym ukośnikiem do pliku bootstrap TS, zmiany na ES6 (co powoduje kilka problemów, tak jak powiedział @DatBoi ), zaktualizuj VS2015 NodeJSi / lub NPMdołączone kompilacje lub zainstaluj typingsglobalnie.

Oto, co zrobiłem w kilku krokach:

  • dodane typingsw package.jsonpliku projektu .
  • dodano scriptblok w package.jsonpliku do wykonania / aktualizacji typingspo każdej akcji NPM.
  • dodano typings.jsonplik w folderze głównym projektu zawierający odniesienie do core-js, który jest jednym z najlepszych obecnie dostępnych pakietów podkładek / polyfill do naprawiania problemów z ES5 / ES6.

Oto jak package.jsonpowinien wyglądać plik (tylko odpowiednie wiersze):

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

A oto typings.jsonplik:

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

( Jasminei Nodenie są wymagane, ale radzę zachować je na wypadek, gdyby zajdzie taka potrzeba w przyszłości).

Ta poprawka działa dobrze z Angular2 RC1 do RC4, czego potrzebowałem, ale myślę, że rozwiąże również podobne problemy z innymi pakietami bibliotek obsługującymi ES6.

AFAIK, myślę, że jest to najczystszy możliwy sposób naprawienia tego bez zepsucia domyślnych ustawień VS2015.

Aby uzyskać więcej informacji i szczegółową analizę problemu, proponuję również przeczytać ten wpis na moim blogu.

Darkseal
źródło
3

Jeśli używasz Angular2 RC1 z typami v1.0 +, użyj polecenia:

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

aby zainstalować definicję core-js, a następnie odwołać się do indeksu globalnego w pliku main.ts:

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

Jeśli używasz es6-shim lub innej biblioteki shim, zainstaluj zamiast tego typy dla tego

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

Simon Trewhella
źródło
2

Zauważyłem te problemy, które pojawiają się po aktualizacji z Angular 5 do Angular 6. Udało mi się to naprawić, wykonując następujące czynności w VS2017:

  • Upewnij się, że zestaw SDK TypeScript został zainstalowany (za pośrednictwem Instalatora programu Visual Studio) dla mojej konkretnej wersji języka TypeScript 2.9
  • Upewnij się, że właściwość projektu Module System jest ustawiona zgodnie z wartością w pliku my tsconfig.json: ES2015. Często jest to automatycznie synchronizowane, jeśli plik tsconfig znajduje się w katalogu głównym projektu. Jednak ponieważ korzystałem z szablonu VS Angular, umieszcza te pliki w podfolderze „ClientApp”, a właściwość projektu Module System nie została ustawiona.

Właściwości projektu VS2017

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
źródło
1

Miałem ten sam problem podczas tworzenia obiektu obietnicy w mojej klasie. Zmiana nazwy celu na „es5” z „es6” rozwiązała mój problem.

CharithW
źródło
1

Innym możliwym rozwiązaniem jest ponowna instalacja typów:
To działa dla mnie"angular2": "2.0.0-beta.15"

  1. npm clean cache
  2. npm install
  3. npm install -g typings
  4. Usuń typingskatalog z projektu (katalog, w którym są zainstalowane moduły typowania)
  5. typings install
  6. npm run
Vicky Gonsalves
źródło
1

Kolejne dobre rozwiązanie. Musisz utworzyć plik typings.json w katalogu głównym projektu z zawartością:

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

Następnie zainstaluj globalny lub lokalny pakiet znaków, jeśli nie jest zainstalowany (instaluję go globalnie):

sudo npm install --global typings

W katalogu głównym projektu uruchom polecenie:

typings install

Po rozwiązaniu tego problemu. Nie ma potrzeby zmiany celu tsconfig na es6 lub es7. Twoja aplikacja internetowa nie obsługuje później niektórych starszych wersji przeglądarek.

Alexey Nikitenko
źródło
1

Jeśli przyszedłeś tutaj, ponieważ widzisz te błędy w programie Visual Studio 2017, masz inny problem, jak powyżej, jeśli uda Ci się kompilować. Dzieje się tak, ponieważ usługa językowa nie wybiera pliku tsconfig.json.

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

Musisz ustawić akcję kompilacji twojego tsconfig.json na "Zawartość" (kliknij prawym przyciskiem myszy -> Właściwości), a następnie VS ją podniesie.

Pieter Van Winckel
źródło
0

Znalazłem odniesienie w boot.ts nie było poprawną ścieżką. Aktualizuję tę ścieżkę do/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" /> rozwiązania błędów obietnicy.

wspaniały
źródło
0

Trenuję z tutorialem angular2 (bohater).
Po zainstalowaniu @ types / core-js skomentowanych w tych odpowiedziach, otrzymałem błąd „Zduplikowany identyfikator”.
W moim przypadku zostało to rozwiązane jako usunięcie linii lib w tsconfig.json.

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

coffeenjava
źródło
-1

moja struktura plików jest następująca:

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

wklej poniższy kod w górnej części pliku app.ts i problem został rozwiązany

/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />
Matey Aryeh
źródło
Zmiana wpisu TARGET tak, aby wskazywała na ES6 w tsconfig.json, rozwiązała ten problem, jak wskazano w niektórych odpowiedziach powyżej.
TheCopyPaster
-1

Mam ten sam problem i mogę go znaleźć na github https://github.com/angular/angular-cli/issues/1901 , który stwierdza, że ​​był to problem [email protected].

Zmiana wersji maszynopisu na 2.0.0globalną i lokalną pomogła mi rozwiązać ten problem.

Globalnie:

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

Lokalnie: PRZEJDŹ do folderu projektu utworzonego przez ng new

npm uninstall typescript
npm cache clean
npm install typescript@2.0.0

Zmieniłem również wersję skryptu w pliku package.json z ^2.0.0na 2.0.0, ale nie działało, dopóki nie obniżyłem wersji lokalnej instalacji maszynopisu.

samochód wodny
źródło
Dlaczego ludzie to odrzucają, chciałbym wiedzieć, dlaczego to zły pomysł. Jeśli maszynopis jest językiem transpiled i jest konwertowany na javascript, jest tak bezpieczny, jak Twoja przeglądarka, więc nie ma żadnego ryzyka, prawda?
user3505901