Après avoir installé Angular, le compilateur TypeScript continue de recevoir des erreurs indiquant que Promise
, Map
, Set
et Iterator
ne sont pas trouvés.
Jusqu'à présent, je les ignorais, mais maintenant, j'ai besoin de Promise
pour que mon code puisse fonctionner.
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
Les erreurs:
................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'.
_ {Ceci devrait également fonctionner de la même manière que les versions précédentes de Angular 2+.
Pour que cela fonctionne avec TypeScript 2.0.0, j'ai procédé comme suit.
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"
]
}
Plus d'informations sur les @ types avec TypeScript 2.0.0.
Exemple d'installation:
npm install --save-dev @types/core-js
Erreurs d'identificateur en double
Cela est probablement dû au fait que des typages ecmascript 6 en double sont déjà importés d'un autre endroit, probablement d'un ancien es6-shim.
Vérifiez deux fois sur typings.d.ts
et assurez-vous qu'il n'y a aucune référence à es6
. Supprimez toute référence à es6
de votre répertoire de frappe si vous en avez une.
Par exemple:
Cela entrera en conflit avec types:['core-js']
dans typings.json.
{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.0.0+20160602141332"
// es6-shim will also conflict
}
}
Inclure core-js
dans le tableau de types dans tsconfig.json
devrait être le seul endroit où il est importé.
CLI angulaire 1.0.0-beta.30
Si vous utilisez la CLI angulaire, supprimez le tableau lib dans typings.json
. Cela semble entrer en conflit avec la déclaration de core-js dans les types.
"compilerOptions" : {
...
// removed "lib": ["es6", dom"],
...
},
"types" : ["core-js"]
Webstorm/Utilisateurs intelligents utilisant la CLI angulaire
Assurez-vous que le compilateur TypeScript intégré est désactivé. Cela entrera en conflit avec la CLI. Pour compiler votre TypeScript avec la CLI, vous pouvez configurer une configuration ng serve
.
Tsconfig compilerOptions lib vs types
Si vous préférez ne pas installer les définitions de type js principales, certaines bibliothèques es6 sont fournies avec TypeScript. Ceux-ci sont utilisés via la propriété lib: []
dans tsconfig.
Voir par exemple ici: https://www.typescriptlang.org/docs/handbook/compiler-options.html
Remarque: Si --lib n'est pas spécifié, une bibliothèque par défaut est injectée. Le La bibliothèque par défaut injectée est la suivante: ► Pour --target ES5: DOM, ES5, ScriptHost ► Pour --target ES6: DOM, ES6, DOM.Iterable, ScriptHost
tl; dr
Une réponse courte soit "lib": [ "es6", "dom" ]
ou "types": ["core-js"]
peut être utilisée pour résoudre can't find Promise,Map, Set and Iterator
. L'utilisation des deux entraînera toutefois des erreurs d'identificateur en double.
J'ai également le même problème - "Promise non trouvée" - lorsque le code veut créer un objet Promise.
J'ai essayé une solution trouvée dans stackoverflow, y compris celle consistant à extraire System.config ({...}) pour former system.js et l'inclure dans index.html.
Finalement j'ai résolu le problème. Le problème est que, dans index.html, es6-shim.min.js est inclus. Cependant, dans tsconfig.json, la propriété "cible" sous "compilerOptions" a la valeur "es5". Après que je l'ai changé en "es6", l'erreur est partie.
es6-shim
n'est pas pris en charge par mise à jour maintenant, si vous avez les deux polices installées ensemble es6-shim
& core-js
ensemble Supprimez es6-shim
en tapant dans tsconfig.json. Vous pouvez maintenant vous référer ci-dessous à core-js
en tapant pour es5
support à l'intérieur de main.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"
]
Il vous suffit de définir la propriété "target"
sur es6
; toutes les erreurs disparaîtront. Et le code transpilé sera au format es6
.
TLDR;
Transpile en es6
Transpile en es5
Pour les lecteurs:
tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "system",
"moduleResolution": "node",
...
},
"exclude": [
"node_modules",
"jspm_packages"
]
}
Gardez à l'esprit uglifyjs ne supporte pas es6 pour le moment . Cela pourrait vous empêcher de créer des lots de production.
tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
...
},
"exclude": [
"node_modules",
"jspm_packages"
]
}
Installez dactylographie, puis installez es6-shim:
npm install typings --saveDev
typings install dt~es6-shim --global --save
Si vous suivez cette route, vous devez vous assurer que le compilateur TypeScript peut trouver le fichier .d.ts.
Vous avez deux options:
une. Assurez-vous que votre tsconfig.json est au même niveau que le dossier typings.
b. Incluez une référence dans votre fichier main.ts où votre application angular2 est démarrée.
Remarque: N'utilisez PAS l'indicateur d'exclusion pour exclure le dossier de frappe.
project
|-- src
|-- node_modules
|-- package.json
|-- typings
|-- tsconfig.json
Comme indiqué dans d'autres réponses, ce fichier n'est plus inclus par Angular}
main.ts:
/// <reference path="../../typings/globals/es6-shim/index.d.ts" />
Avec TypeScript> = 2, l'option "lib" de tsconfig.json fera l'affaire. Pas besoin de dactylographie. https://www.typescriptlang.org/docs/handbook/compiler-options.html
{
"compilerOptions": {
"target": "es5",
"lib": ["es2016", "dom"] //or es6 instead of es2016(es7)
}
}
C'est ce qui a fonctionné pour moi.
vérifie s'il existe un fichiertypings.json
,
Cela ressemble à quelque chose comme ça,
{ "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" } }
Installez le paquet typings globalement.
Sudo npm install -g typings
après avoir installé typings , exécutez
typings install
puis redémarrez le serveur.
J'ai eu le même problème où il ne reconnaissait pas Promise.resolve () method. J'ai changé"cible"valeur de ES5 à ES6 in tsconfig.json . Cela a résolu le problème.
J'espère que cela t'aides.
Depuis que Angular 2 est passé à RC 0, /angular2/typings/browser.d.ts ne fait plus partie de la distribution Angular 2. Le fichier peut être installé séparément.
À partir de là: https://github.com/angular/angular/issues/8513 il y a quelques options. Celui qui a fonctionné pour moi était:
typings install es6-shim --ambient --save
// In your app.ts
/// <reference path="typings/browser.d.ts" />
J'ai réussi à résoudre ce problème sans avoir à ajouter de référence triple-barre oblique au fichier d'amorçage TS, puis de passer à ES6 (ce qui entraîne de nombreux problèmes, tout comme @DatBoi said) met à jour les variables NodeJS
et/ou NPM
de VS2015 fournies en bundle. construit ou installe typings
globalement.
Voici ce que j'ai fait en quelques étapes:
typings
dans le fichier package.json
du projet.script
dans le fichier package.json
pour exécuter/mettre à jour typings
après chaque action NPM.typings.json
dans le dossier racine du projet contenant une référence à core-js
, qui est l'un des meilleurs packages shim/polyfill du moment pour résoudre les problèmes ES5/ES6.Voici à quoi devrait ressembler le fichier package.json
(lignes pertinentes uniquement):
{
"version": "1.0.0",
"name": "YourProject",
"private": true,
"dependencies": {
...
"typings": "^1.3.2",
...
},
"devDependencies": {
...
},
"scripts": {
"postinstall": "typings install"
}
}
Et voici le fichier 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
et Node
ne sont pas nécessaires, mais je suggère de les conserver au cas où vous en auriez besoin à l'avenir).
Ce correctif fonctionne bien avec Angular2 RC1 à RC4, ce dont j'avais besoin, mais je pense qu'il corrigera également des problèmes similaires avec d'autres packages de bibliothèque activés par ES6.
Autant que je sache, je pense que c’est le moyen le plus propre de le réparer sans modifier les paramètres par défaut du VS2015.
Pour plus d'informations et une analyse détaillée de la question, je suggère également de lire cet article sur mon blog.
Si vous utilisez Angular2 RC1 avec des typages v1.0 +, utilisez la commande suivante:
typings install dt~core-js --save --global
pour installer la définition de core-js puis référencer votre index global dans votre main.ts:
/// <reference path="../../../typings/index.d.ts" />
Si vous utilisez es6-shim ou une autre bibliothèque de shim, installez plutôt des typages pour cela
Reportez-vous à https://github.com/typings/typings/issues/517
Si vous êtes venu ici parce que vous voyez ces erreurs dans Visual Studio 2017, vous rencontrez un problème différent de celui décrit ci-dessus, si vous parvenez à la compilation. En effet, le service linguistique ne sélectionne pas votre tsconfig.json.
Vous devez définir l'action de construction de votre tsconfig.json sur "Contenu" (clic droit -> Propriétés), puis VS le prendra en charge.
Une autre bonne solution . Vous devez créer un fichier typings.json dans le répertoire racine du projet avec le contenu:
{
"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"
}
}
Puis installez le paquet typings global ou local, s'il n'est pas installé (je l'installe globalement):
Sudo npm install --global typings
Dans la commande d'exécution du répertoire racine du projet:
typings install
Une fois ce problème résolu. Inutile de changer la cible de tsconfig en es6 ou es7. Votre application Web ne prend plus en charge par la suite une ancienne version des navigateurs.
J'ai eu le même problème lors de la création d'un objet de promesse dans ma classe… .. En modifiant le nom de la cible en «es5» à partir de «es6», le problème a été résolu.
J'ai remarqué que ces problèmes se manifestaient après la mise à niveau de Angular 5 à Angular 6. J'ai pu résoudre ce problème en procédant comme suit dans 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": "./"
}
}
Une autre solution possible consiste à réinstaller les typages:
Cela fonctionne pour moi pour "angular2": "2.0.0-beta.15"
npm clean cache
npm install
npm install -g typings
typings
du projet (les modules de typage Directory wwhere sont installés)typings install
npm run
Je m'entraîne avec un tutoriel angular2 (héros) .
Après l’installation de @ types/core-js commentés dans ces réponses, j’ai reçu l’erreur "Identificateur en double" .
Dans mon cas, cela a été résolu en supprimant la ligne de lib dans tsconfig.json.
// "lib": ["es2015", "dom"]
J'ai trouvé que la référence dans boot.ts n'était pas le bon chemin. La mise à jour de ce chemin vers /// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />
a résolu les erreurs de promesse.