Po zainstalowaniu Angulara kompilator Typescript wciąż otrzymuje błędy związane z brakiem znalezienia Promise
, Map
, Set
i Iterator
.
Do tej pory je ignorowałem, ale teraz potrzebuję, Promise
aby 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'.
javascript
angular
typescript
Stav Alfi
źródło
źródło
Odpowiedzi:
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
Więcej o @types z maszynopisem 2.0.0.
Przykład instalacji:
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.ts
czy nie ma odniesień does6
. Usuń wszelkie odniesienia does6
z katalogu typings, jeśli takie masz.Na przykład:
Spowoduje to konflikt z
types:['core-js']
w typings.json.Uwzględnianie
core-js
w 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.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 serve
konfigurację.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
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.źródło
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ął.
źródło
Angular 2 Final
- obsługa es5 (działa doskonale z TS 2.0.0 +)
es6-shim
Każda aktualizacja nie jest teraz obsługiwana, jeśli masz zainstalowane oba typy razemes6-shim
icore-js
razem. Usuńes6-shim
wpisywanie, wspominając w tsconfig.json. Możesz teraz odnieść się poniżej,core-js
wpisująces5
wsparcie w środkumain.ts
tsconfig.json
- wsparcie es6
Wystarczy ustawić
"target"
właściwość naes6
, wtedy wszystkie błędy znikną. Kod przetransponowany będzie wes6
formacie.źródło
2.0.0-rc.1
. Zacząłem używać Angulara dopiero kilka dni temu. Pracowałem mimo początkowej dokumentacji [tutaj] (). Wpackage.json
wł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>
jestcommon
,compiler
,core
,http
,platform-browser
,platform-browser-dynamic
,router
,router-deprecated
iupgrade
.Zaktualizowano od Angular-2.0.0-rc.4
TLDR;
Transpile do es6
Transpile do es5
Dla czytelników:
Opcja 1: Transpile do es6 lub es2015
tsconfig.json:
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:
Zainstaluj typy, a następnie zainstaluj podkładkę es6-shim:
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.
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:
źródło
--saveDev
na razie nie działa.--save-dev
robi.typings
być instalowane globalnie?Gdy masz Typescript> = 2, opcja "lib" w tsconfig.json wykona zadanie. Nie ma potrzeby pisania. https://www.typescriptlang.org/docs/handbook/compiler-options.html
źródło
To właśnie zadziałało dla mnie.
sprawdzić, czy istnieje
typings.json
plik,Zainstaluj pakiet typów na całym świecie.
po zainstalowaniu typów uruchom
następnie zrestartuj serwer.
źródło
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.
źródło
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:
źródło
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
NodeJS
i / lubNPM
dołączone kompilacje lub zainstalujtypings
globalnie.Oto, co zrobiłem w kilku krokach:
typings
wpackage.json
pliku projektu .script
blok wpackage.json
pliku do wykonania / aktualizacjitypings
po każdej akcji NPM.typings.json
plik w folderze głównym projektu zawierający odniesienie docore-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.json
powinien wyglądać plik (tylko odpowiednie wiersze):A oto
typings.json
plik:(
Jasmine
iNode
nie 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.
źródło
Jeśli używasz Angular2 RC1 z typami v1.0 +, użyj polecenia:
aby zainstalować definicję core-js, a następnie odwołać się do indeksu globalnego w pliku main.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
źródło
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:
tsconfig.json:
źródło
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.
źródło
Innym możliwym rozwiązaniem jest ponowna instalacja typów:
To działa dla mnie
"angular2": "2.0.0-beta.15"
npm clean cache
npm install
npm install -g typings
typings
katalog z projektu (katalog, w którym są zainstalowane moduły typowania)typings install
npm run
źródło
Kolejne dobre rozwiązanie. Musisz utworzyć plik typings.json w katalogu głównym projektu z zawartością:
Następnie zainstaluj globalny lub lokalny pakiet znaków, jeśli nie jest zainstalowany (instaluję go globalnie):
W katalogu głównym projektu uruchom polecenie:
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.
źródło
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.
źródło
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.źródło
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.
źródło
moja struktura plików jest następująca:
wklej poniższy kod w górnej części pliku app.ts i problem został rozwiązany
źródło
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.0
globalną i lokalną pomogła mi rozwiązać ten problem.Globalnie:
Lokalnie: PRZEJDŹ do folderu projektu utworzonego przez ng new
Zmieniłem również wersję skryptu w pliku package.json z
^2.0.0
na2.0.0
, ale nie działało, dopóki nie obniżyłem wersji lokalnej instalacji maszynopisu.źródło