J'utilise Angular (version 2) avec TypeScript (version 1.6) et lorsque je compile le code, je reçois les erreurs suivantes:
Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/change_detection/parser/locals.d.ts(4,42): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/collection.d.ts(1,25): Error TS2304: Cannot find name 'MapConstructor'.
node_modules/angular2/src/core/facade/collection.d.ts(2,25): Error TS2304: Cannot find name 'SetConstructor'.
node_modules/angular2/src/core/facade/collection.d.ts(4,27): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/collection.d.ts(4,39): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/collection.d.ts(7,9): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/collection.d.ts(8,30): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/collection.d.ts(11,43): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/collection.d.ts(12,27): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/collection.d.ts(14,23): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/collection.d.ts(15,25): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/collection.d.ts(94,41): Error TS2304: Cannot find name 'Set'.
node_modules/angular2/src/core/facade/collection.d.ts(95,22): Error TS2304: Cannot find name 'Set'.
node_modules/angular2/src/core/facade/collection.d.ts(96,25): Error TS2304: Cannot find name 'Set'.
node_modules/angular2/src/core/facade/lang.d.ts(1,22): Error TS2304: Cannot find name 'BrowserNodeGlobal'.
node_modules/angular2/src/core/facade/lang.d.ts(33,59): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/facade/promise.d.ts(1,10): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/facade/promise.d.ts(3,14): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/facade/promise.d.ts(8,32): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/facade/promise.d.ts(9,38): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/facade/promise.d.ts(10,35): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/facade/promise.d.ts(10,93): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/facade/promise.d.ts(11,34): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/facade/promise.d.ts(12,32): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/facade/promise.d.ts(12,149): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/facade/promise.d.ts(13,43): Error TS2304: Cannot find name 'Promise'.
node_modules/angular2/src/core/linker/element_injector.d.ts(72,32): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/element_injector.d.ts(74,17): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/element_injector.d.ts(78,184): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/element_injector.d.ts(83,182): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/element_injector.d.ts(107,37): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/proto_view_factory.d.ts(27,146): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/view.d.ts(52,144): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/view.d.ts(76,79): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/view.d.ts(77,73): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/view.d.ts(94,31): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/view.d.ts(97,18): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/view.d.ts(100,24): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/view.d.ts(103,142): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/linker/view.d.ts(104,160): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/render/api.d.ts(281,74): Error TS2304: Cannot find name 'Map'.
node_modules/angular2/src/core/zone/ng_zone.d.ts(1,37): Error TS2304: Cannot find name 'Zone'.
C'est le code:
import 'reflect-metadata';
import {bootstrap, Component, CORE_DIRECTIVES, FORM_DIRECTIVES} from 'angular2/core';
@Component({
selector: 'my-app',
template: '<input type="text" [(ng-model)]="title" /><h1>{{title}}</h1>',
directives: [ CORE_DIRECTIVES ]
})
class AppComponent {
title :string;
constructor() {
this.title = 'hello angular 2';
}
}
bootstrap(AppComponent);
Un problème connu: https://github.com/angular/angular/issues/4902
Raison fondamentale: le fichier .d.ts
inclus implicitement par TypeScript varie en fonction de la cible de la compilation. Il est donc nécessaire de disposer de davantage de déclarations d'ambiance lorsque vous ciblez es5
même si des éléments sont réellement présents dans les environnements d'exécution (par exemple, chrome). Plus sur lib.d.ts
Une solution de contournement est mentionnée dans le journal des modifications de 2.0.0-beta.6 (2016-02-11) (répertoriée sous les modifications les plus importantes):
Si vous utilisez --target = es5, vous devrez ajouter une ligne quelque part dans votre application (par exemple, en haut du fichier .ts où vous appelez bootstrap):
///<reference path="node_modules/angular2/typings/browser.d.ts"/>
(Notez que si votre fichier ne se trouve pas dans le même répertoire que node_modules, vous devrez ajouter un ou plusieurs ../ au début de ce chemin.)
assurez-vous que vous avez le bon chemin de référence, je devais ajouter ../ au début pour que cela fonctionne.
Les fonctionnalités ES6 telles que les promesses ne sont pas définies lors du ciblage de ES5. Il existe d'autres bibliothèques, mais core-js est la bibliothèque javascript utilisée par l'équipe Angular. Il contient des polyfills pour ES6.
Angular 2 a beaucoup changé depuis que cette question a été posée. Les déclarations de type sont much plus faciles à utiliser dans TypeScript 2.0.
npm install -g TypeScript
Pour les fonctionnalités ES6 dans Angular 2, vous n'avez pas besoin de dactylographie. Utilisez simplement TypeScript 2.0 ou supérieur et installez @ types/core-js avec npm:
npm install --save-dev @types/core-js
Ajoutez ensuite les attributs TypeRoots et Types à votre tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "es6",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"typeRoots": [
"../node_modules/@types"
],
"types" : [
"core-js"
]
},
"exclude": [
"node_modules"
]
}
C'est beaucoup plus facile que d'utiliser Typings, comme expliqué dans d'autres réponses. Voir l'article de Microsoft sur le blog pour plus d'informations: TypeScript: l'avenir des fichiers de déclaration
J'ai pu résoudre ce problème avec la commande suivante
typings install es6-promise es6-collections --ambient
Notez que vous avez besoin de typings
pour que la commande ci-dessus fonctionne, si vous ne l’avez pas fait, exécutez la commande suivante pour l’installer.
npm install -g typings
METTRE &AGRAVE; JOUR
typings update ne lit pas --ambient
il est devenu --global
également pour certaines personnes, vous devez installer les définitions des bibliothèques ci-dessus, utilisez simplement la commande suivante
typings install dt~es6-promise dt~es6-collections --global --save
Merci à @bgerth pour l'avoir signalé.
Pour ceux qui suivent le tutoriel Angular2 sur angular.io
juste pour être explicite, voici une extension de la réponse de mvdluit indiquant exactement où placer le code:
Votre main.ts
devrait ressembler à ceci:
/// <reference path="../node_modules/angular2/typings/browser.d.ts" />
import {bootstrap} from 'angular2/platform/browser'
import {AppComponent} from './app.component'
// Add all operators to Observable
import 'rxjs/Rx'
bootstrap(AppComponent);
Notez que vous laissez dans le ///
des barres obliques, ne les supprimez pas.
ref: https://github.com/ericmdantas/angular2-TypeScript-todo/blob/master/index.ts#L1
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)
}
}
Pour Angular 2.0.0-rc.0
, ajouter node_modules/angular2/typings/browser.d.ts
ne fonctionnera pas. Commencez par ajouter le fichier typings.json à votre solution, avec ce contenu:
{
"ambientDependencies": {
"es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#7de6c3dd94feaeb21f20054b9f30d5dabc5efabd"
}
}
Et puis mettez à jour le fichier package.json
pour inclure cette postinstall
:
"scripts": {
"postinstall": "typings install"
},
Maintenant, lancez npm install
De plus, vous devriez également ignorer le dossier typings
dans votre fichier tsconfig.json
:
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
Mettre à jour
AngularJS 2.0 utilise maintenant core-js
au lieu de es6-shim
. Suivez son fichier de démarrage rapide typings.json pour plus d’informations.
vous pouvez ajouter le code au début des fichiers .ts.
/// <reference path="../typings/index.d.ts" />
Je recevais cela sur Angular 2 rc1. Il s'avère que certains noms ont été modifiés avec les typings v1 par rapport à l'ancien 0.x. Les fichiers browser.d.ts
sont devenus index.d.ts
.
Après avoir exécuté typings install
, localisez votre fichier de démarrage (où vous avez démarré) et ajoutez:
/// <reference path="../typings/index.d.ts" />
(ou sans le ../
si votre fichier de démarrage se trouve dans le même dossier que le dossier typings)
L'ajout de index.d.ts
à la liste de fichiers dans tsconfig.json
n'a pas fonctionné pour une raison quelconque.
De plus, le package es6-shim
n'était pas nécessaire.
J'ai pu résoudre ce problème en installant le module typings
.
npm install -g typings
typings install
(Utilisation de ng 2.0.0-rc.1)
J'ai eu le même problème et je l'ai résolu en utilisant l'option lib
dans tsconfig.json
. Comme indiqué par basarat dans sa réponse , un fichier .d.ts
est implicitement inclus par TypeScript en fonction de la compilation target
option mais ce comportement peut être modifié avec l’option lib
.
Vous pouvez spécifier d'autres fichiers de définition à inclure sans modifier la version de JS ciblée. Par exemple, cela fait partie de ma compilerOptions
actuelle pour [email protected] et ajoute la prise en charge des fonctionnalités es2015
sans rien installer d'autre:
"compilerOptions": {
"experimentalDecorators": true,
"lib": ["es5", "dom", "es6", "dom.iterable", "scripthost"],
"module": "commonjs",
"moduleResolution": "node",
"noLib": false,
"target": "es5",
"types": ["node"]
}
Pour la liste complète des options disponibles, consultez le document officiel .
Notez également que j'ai ajouté "types": ["node"]
et installé npm install @types/node
pour prendre en charge require('some-module')
dans mon code.
C’est ce que pense que chacun essaye de faire quelque chose de différent. Je crois que ces systèmes sont encore loin de la version finale.
Dans mon cas, j'ai mis à jour de rc.0 à rc.5 cette erreur est apparue.
Ma correction était changer le tsconfig.json.
{
"compilerOptions": {
"target": "es6", <-- It was es5
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"outDir": "../wwwroot/app"
},
"compileOnSave": true,
"exclude": [
"../node_modules",
"../typings/main"
]
}
Je suis nouveau dans Angular, mais pour moi, la solution a été trouvée en important simplement Input. Je ne peux pas accepter le crédit pour celui-ci, je l'ai trouvé sur un autre tableau. C’est une solution simple si vous rencontrez le même problème mais si vos problèmes sont plus complexes, je lis ce qui précède.
Mukesh :
vous devez importer une entrée comme celle-ci en haut du composant enfant
import { Directive, Component, OnInit, Input } from '@angular/core';
Si npm install -g typings typings install
ne vous aide toujours pas, supprimez les dossiers node_modules et typings avant d'exécuter cette commande.
typings install dt~es6-shim --save --global
et ajoutez le chemin correct à index.d.ts
///<reference path="../typings/index.d.ts"/>
Essayé sur @ angular-2.0.0-rc3
ajoutez typing.d.ts dans le dossier principal de l'application et, là-bas, déclarez la variable que vous souhaitez utiliser à chaque fois
declare var System: any;
declare var require: any;
après avoir déclaré cela dans typing.d.ts, l'erreur for require ne viendra pas dans l'application ..
J'ai trouvé ce document très utile sur le site Web de Angular 2. Cela m'a finalement permis de faire fonctionner les choses correctement, alors que les autres réponses ici, installer des saisies, m'ont échoué avec diverses erreurs. (Mais m'a aidé à me conduire dans la bonne direction.)
Au lieu d'inclure es6-promise et es6-collections, il inclut core-js, ce qui a fait l'affaire pour moi ... aucun conflit avec les définitions de base d'Angular2. De plus, le document expliquait comment configurer automatiquement tout cela lors de l'installation de NPM et comment modifier votre fichier typings.json.
Bon appel, @VahidN, j'ai trouvé qu'il me fallait
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
Dans ma tsconfig
également, pour empêcher les erreurs de es6-shim
lui-même
Angular 2 RC1 a renommé le répertoire node_modules/angular2
en node_modules/angular
.
Si vous utilisez un fichier gulp pour copier des fichiers dans un répertoire de sortie, le code node_modules/angular
est probablement toujours présent, ce qui risque d’être repris par le compilateur et de semer la confusion.
Donc, effacez (avec soin) ce que vous avez dans node_modules
qui est destiné aux versions bêta, supprimez également tout ancien typage et relancez typings install
.
Importez l’instruction ci-dessous dans votre fichier JS.
import 'rxjs/add/operator/map';
J'obtenais cette erreur après avoir fusionné ma branche dev à ma branche actuelle. J'ai passé quelque temps à résoudre le problème. Comme vous pouvez le voir dans l'image ci-dessous, il n'y a aucun problème dans les codes.
Donc, le seul correctif qui a fonctionné pour moi est que Redémarrage du VSCode
La réponse acceptée ne fournit pas de solution viable, et la plupart des autres suggèrent la solution de contournement "triple barre oblique" qui n'est plus viable, puisque le browser.d.ts
a été supprimé par les derniers contrôleurs Angular2 et n'est donc plus disponible.
Je suggère fortement d'installer le module typings
comme suggéré par quelques solutions ici, mais il n'est pas nécessaire de le faire manuellement ou globalement - il existe un moyen efficace de le faire uniquement pour votre projet et dans l'interface VS2015. Voici ce que vous devez faire:
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
(globalement supérieur à es6-shim
atm).C'est tout.
Vous pouvez également consulter cet autre fil SO et/ou lire ce message sur mon blog pour plus de détails.
Maintenant, vous devez les importer manuellement.
import 'rxjs/add/operator/retry';
import 'rxjs/add/operator/timeout';
import 'rxjs/add/operator/delay';
import 'rxjs/add/operator/map';
this.http.post(url, JSON.stringify(json), {headers: headers, timeout: 1000})
.retry(2)
.timeout(10000, new Error('Time out.'))
.delay(10)
.map((res) => res.json())
.subscribe(
(data) => resolve(data.json()),
(err) => reject(err)
);