AngularとTypescript:名前が見つからない


221

TypeScript(バージョン1.6)でAngular(バージョン2)を使用していて、コードをコンパイルすると次のエラーが発生します。

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'.

これはコードです:

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);

ここで問題があるようですgithub.com/angular/angular/issues/4902
rob

import {ROUTER_PROVIDERS} from 'angular2/router';同じ問題が発生している次のインポートを追加してみてください。何らかの理由でこれにより修正されます...?!?
rob

回答:


52

既知の問題:https : //github.com/angular/angular/issues/4902

主な理由:.d.tsTypeScriptによって暗黙的にインクルードされるファイルはコンパイルターゲットによって異なるためes5、ランタイムに実際に存在するもの(例:クロム)を対象とする場合でも、ターゲットの場合はさらに多くのアンビエント宣言が必要です。もっとlib.d.ts


446
それで、解決策は何ですか?
user233232 2015年

3
2.0.0-alpha.45は適切です。node_modules/ angular2 / bundles / typings / ** / *。d.tsからのタイピングを使用してください
Are Butuv

2
"angular2": "2.0.0-beta.3"は機能しますが、少なくともチュートリアルの
CorayThan

3
@Rojこれはまだベータ6で見られますが、browser.d.tsへの参照を使用すると機能します
inki

3
やったー!rc1が参加しました。
RoninCoder 2016年

105

2.0.0-beta.6(2016-02-11)の変更ログに記載されている回避策があります(重大な変更の下にリストされています):

--target = es5を使用する場合、アプリケーションのどこかに(たとえば、ブートストラップを呼び出す.tsファイルの上部に)行を追加する必要があります。

///<reference path="node_modules/angular2/typings/browser.d.ts"/>

(ファイルがnode_modulesと同じディレクトリにない場合は、そのパスの先頭に1つ以上の../を追加する必要があることに注意してください。)

正しい参照パスがあることを確認してください。これを機能させるには、最初に../を追加する必要がありました。


3
これで多くのエラーが修正されましたが、それでもエラーが発生TS2304: Cannot find name 'module'TS2339: Property 'find' does not exist on type 'MyThing[]'.ます...何かアイデアはありますか?
mwijnands 2016

1
再利用を目的としたパッケージでangularを使用するとどうなりますか?この参照を持つファイルを含むパッケージを使用しようとするアプリケーションは、tscのビルド時に、この参照が見つからないというメッセージを表示します。
ハンス

5
Angularの新しいパッケージ構造の解決策はありますか、新しい@angular / ....構造にbrowser.d.tsが見つかりません
I.devries

2
@ I.devries正解です。browser.d.tsは削除されました。これでファイルはindex.d.tsになり、角度コンポーネントごとに1つ必要になります。それぞれがrc.0以降に個別にインストールされるようになったためです。また、「タイピング」をインストールする必要があります-上記のKhaled Al-AnsariおよびtheUtherSideによる回答を参照してください。
Vern Jensen

1
/// <reference path = "../ typings / index.d.ts" />を追加することで解決しました
Sako73

80

ES5を対象とする場合、promiseなどのES6機能は定義されていません。他のライブラリもありますが、core-jsはAngularチームが使用するJavaScriptライブラリです。ES6のポリフィルが含まれています。

Angular 2は、この質問が出されて以来、大きく変化しています。Typescript 2.0では、型宣言がはるかに使いやすくなっています。

npm install -g typescript

Angular 2のES6機能の場合、タイピングは必要ありません。typescript 2.0以上を使用し、@ types / core-jsをnpmでインストールするだけです。

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

次に、TypeRootsおよびTypes属性を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"
  ]
}

他の回答で説明されているように、これはタイピングを使用するよりもはるかに簡単です。詳細については、Microsoftのブログ投稿を参照してください:Typescript:The Future of Declaration Files


1
「types」配列も「compilerOptions」オブジェクトに属していると思います。しかし、それ以外は、たくさんのおかげで、私は一日中これに苦労していました。
神経叢

@plexusありがとう!あなたはcompilerOptionsについて正しいです。答えを直した。
David Rinck 2016

すばらしい投稿をありがとう、しかしあなたが提供したURLによれば、それはtsconfig.jsonを増強する必要すらありません、それはとにかく本当にうまくいきます:)少なくとも私にとってはうまくいきました。したがって、必要なのは必要なパッケージをインストールすることだけです
Ilya Chernomordik

あなたがtypeRoots持っている唯一のエントリがである場合さえ、あなたは取り除くことができますnode_modules/@types
Morgan Touverey Quilling 2017

魔法のように。@イリヤ-chernomordikが述べたように、これはまた、追加することなく、私のために働いたTypeRootsTypestsconfig.jsonに。私の場合、TypeScript 1の埋め込みバージョンを使用してトランスパイルしているGulp gulp-typescript 2.xプラグインも更新する必要がありましたが、更新するとTypeScript 2を使用して@ types / core-jsポリフィルを追加したため、セットする。どうもありがとう。
rscarter 2017年

49

angular.io単に明確にするためにAngular2チュー​​トリアルをフォローしている人のために、ここに、コードを配置する正確な場所に関するmvdluitの回答を展開します。

次のmain.tsようになります。

/// <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);

///スラッシュはそのままにしておき、削除しないでください。

参照:https : //github.com/ericmdantas/angular2-typescript-todo/blob/master/index.ts#L1


VS2015 MVC6とAngular2 beta.14を使用していますが、参照線を配置_references.jsすると機能しません。この回答が示唆するようにコンポーネントの内部にある必要があります。また、パスの../../代わりに../を使用します。
RoninCoder 2016

@ハニ、あなたはそれを回避する方法をもう見つけましたか?rc1にアップグレードして試してみる
Rots

タイピングはなくなりました。個別にインストールする必要があると思います。そうすると、無用のパッケージもたくさん追加されます。とにかく、それをすべて行った後でも、browser.d.tstypesフォルダーの下にはもうありません。の.js下のファイルのみdist。という名前のファイルがあるtypings.d.tsので、新しいファイルだと思いましたが、問題は解決しませんでした。「es6」のビルドは機能しますが、IEは不満を示します。そのため、「es5」ビルドで立ち往生していて、タイピングはありません!:/
RoninCoder 2016年

@ハニ新しい答えがあります。おそらくそれはうまくいくでしょうか?npm install -g typings typings install
2016年

beta.15にダウングレードし.d.ts、typingsパッケージから同じものを使用しました。また、IE9 +要件を満たすために、es3用にビルドする必要がありました。
RoninCoder 2016年

48

私は次のコマンドでこれを修正することができました

typings install es6-promise es6-collections --ambient

typings上記のコマンドがない場合は、次のコマンドを実行してインストールする必要があることに注意してください。

npm install -g typings

更新

タイピングの更新が読めない上記のライブラリの定義をインストールする必要がある人も--ambientいるようになりました--global、次のコマンドを使用してください

typings install dt~es6-promise dt~es6-collections --global --save

これを指摘してくれた@bgerthに感謝します。


9
私にとってそれはそうでしたtypings install dt~es6-promise dt~es6-collections --global --save
bgerth 16/07/13

1
@bgerth typings更新により変更されたと思います。解答に解決策を追加します
Khaled Al-Ansari

入力してインストールdt〜es6-promise dt〜es6-collections --global --saveがうまくいきました。この問題は繰り返し発生し、断続的です...この修正のthxは、1日より長く機能することを望みます。
Sam

入力してインストールdt〜es6-promise dt〜es6-collections --global --saveも
うまくいき

33

Typescript> = 2の場合、tsconfig.jsonの「lib」オプションが機能します。タイピングの必要はありません。https://www.typescriptlang.org/docs/handbook/compiler-options.html

{
    "compilerOptions": {
        "target": "es5",
        "lib": ["es2016", "dom"] //or es6 instead of es2016(es7)
    }
}

うん... "lib":["es2016"、 "dom"]をtsconfig.jsonファイルに追加して修正
Marvel Moe

これは正しいです。宣言されているタイプの一部が存在しない可能性があるため、注意してください。
Aluan Haddad

@Niels Steenbeekはここでそれを修正しています。Angular 2&4コースの演習で同じエラーが発生しました。ただし、私のlibコンテンツは少し異なります: "lib":["es2015"、 "es2015.iterable"、 "dom"]
BoiseBaked

15

以下のためのAngular 2.0.0-rc.0追加node_modules/angular2/typings/browser.d.ts機能しません。まず、このコンテンツを使用して、typings.jsonファイルをソリューションに追加します。

{
    "ambientDependencies": {
        "es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#7de6c3dd94feaeb21f20054b9f30d5dabc5efabd"
    }
}

そしてpackage.json、これを含むようにファイルを更新しますpostinstall

"scripts": {
    "postinstall": "typings install"
},

今すぐ実行 npm install

またtypingstsconfig.jsonファイル内のフォルダーも無視する必要があります。

 "exclude": [
        "node_modules",
        "typings/main",
        "typings/main.d.ts"
    ]

更新

現在、AngularJS 2.0はのcore-js代わりにを使用していますes6-shim。詳細については、クイックスタートのtypings.jsonファイルを参照してください。



15

.tsファイルの先頭にコードを追加できます。

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

これでうまくいきました。タイピングをグローバルにインストールする必要はありません。安定した角度2で試した
Gopinath Shiva

角度2.0.0(リリース)を使用して、あまりにも私のために働いた
JoshuaDavid

10

Angular 2 rc1でこれを取得していました。タイピングv1と古い0.xで変更された一部の名前が判明しました。browser.d.tsファイルはなりましたindex.d.ts

実行した後typings install、起動ファイル(ブートストラップする場所)を見つけて追加します。

/// <reference path="../typings/index.d.ts" />(または../、スタートアップファイルがtypingsフォルダと同じフォルダにある場合はなし)

index.d.tsのファイルリストへの追加は、tsconfig.json何らかの理由で機能しませんでした。

また、es6-shimパッケージは必要ありませんでした。


7

typingsモジュールをインストールすることでこれを修正することができました。

npm install -g typings
typings install

(ng 2.0.0-rc.1を使用)


1
「 'typyings.json'がありません。-(依存関係なし)」。app.tsファイルの同じフォルダーでコマンドを実行すると、このエラーが返されます。このtypings.jsonファイルはどこにありますか、いつコマンドを実行する必要がありますか?
ユリシーズアルベス

7

同じ問題があり、のlibオプションを使用して解決しましたtsconfig.json彼の答えバサラトが言ったように.d.tsファイルはコンパイルtargetオプションに応じてTypeScriptによって暗黙的に含まれますが、この動作はlibオプションます。

対象のJSバージョンを変更せずに、追加の定義ファイルを含めて指定できます。たとえば、これはcompilerOptionsTypescript@2.1 の私の現在の一部であり、es2015他に何もインストールせずに機能のサポートを追加します。

"compilerOptions": {
    "experimentalDecorators": true,
    "lib": ["es5", "dom", "es6", "dom.iterable", "scripthost"],
    "module": "commonjs",
    "moduleResolution": "node",
    "noLib": false,
    "target": "es5",
    "types": ["node"]
}

利用可能なオプションの完全なリストについては、公式ドキュメントを確認してください

コードでサポートするために追加"types": ["node"]してインストールnpm install @types/nodeしたことにも注意してくださいrequire('some-module')


5
 typings install dt~es6-shim --save --global

そして正しいパスをindex.d.tsに追加します

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

@ angular-2.0.0-rc3で試した


このソリューションは、ライブラリプロジェクトで.d.tsファイルが必要な場合に完全に機能します。
Robin Ding

4

npm install -g typings typings installそれでも解決しない場合は、このコマンドを実行する前に、node_modulestypingsフォルダーを削除してください。


4

これは、誰もがどのように違うことをしようとしているのかを考えることです。これらのシステムは、まだ最終版にはほど遠いと思います。

私の場合、rc.0からrc.5に更新しましたが、このエラーが表示されました。

私の修正は、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"
    ]
}

1
これで私の問題も解決しました。RCバージョンはes6をターゲットにしているようです。
イナリ

これで、ES5はターゲットになりません。どちらかといえば、変更"lib"ではなく、変更してください"target"
Aluan Haddad

4

アプリケーションのメインフォルダにtyping.d.tsを追加し、そこに毎回使用したい変数を宣言します

declare var System: any;
declare var require: any;

これをtyping.d.tsで宣言した後は、アプリケーションでrequireのエラーは発生しません。


4

Angularは初めてですが、入力をインポートするだけで解決策が見つかりました。これは信用できません。別のボードで見つけました。これは、同じ問題が発生している場合の簡単な修正ですが、問題がより複雑な場合は、上記のものを読んでみます。

ムケシュ

このような入力を子コンポーネントの上にインポートする必要があります

import { Directive, Component, OnInit, Input } from '@angular/core';

3

この非常に役立つドキュメントを見つけましたAngular 2のWebサイトで。最後に、物事を適切に機能させることができましたが、タイピングをインストールするための他の答えは、さまざまなエラーで失敗しました。(しかし、私を正しい方向に導くのに役立ちました。)

es6-promiseとes6-collectionsを含める代わりに、私にとってはトリックであるcore-jsが含まれています... Angular2のコアts定義と競合しません。さらに、NPMのインストール時にこれがすべて自動的に行われるように設定する方法と、typings.jsonファイルを変更する方法についても説明しました。


2

Angular 2 RC1はnode_modules/angular2ディレクトリの名前をnode_modules/angular

gulpfileを使用してファイルを出力ディレクトリにコピーしている場合は、おそらくまだ node_modules/angularそこに座っいて、コンパイラーに拾われて、それ自体が混乱している可能性があります。

したがって、(注意深く)node_modulesベータ版用のものを一掃し、古い入力をすべて削除して、を再実行してくださいtypings install


または、他の作業を4か月間行い、最終リリースが最初からやり直すのを待ちます(これは私がやっていることです)
Simon_Weaver

2

@VahidNよろしくお願いします。

    "exclude": [
        "node_modules",
        "typings/main",
        "typings/main.d.ts"
    ]

tsconfigも、es6-shimそれ自体からエラーを止めるために


2

JSファイルに以下のステートメントをインポートしてください。

import 'rxjs/add/operator/map';

私はプロジェクトを最新バージョンにアップグレードするのを延期import './rxjs-extensions';しているのでapp.component.ts、angular2チュー​​トリアル(提案された行を含む)のrxjs-extensionsファイルを追加して、それらのエラーを削除したようです。
ジェームズ

もっと具体的に教えてください。どのJSファイル?Typescriptによってコンパイルされたものですか?メイン?
mm_

2

受け入れられた回答は実行可能な修正を提供していません。他のほとんどの解決策はbrowser.d.ts、Angular2の最新のRC版によって削除されたため、もう利用できない「トリプルスラッシュ」の回避策を提案しています。

typingsここでいくつかのソリューションで提案されているようにモジュールをインストールすることを強くお勧めしますが、手動またはグローバルにインストールする必要はありません。プロジェクトのみ、VS2015インターフェース内で実行するための効果的な方法があります。これはあなたがする必要があることです:

  • 追加 typingsプロジェクトのpackage.jsonファイルにします。
  • 各NPMアクションの後に実行/更新するscriptブロックをpackage.jsonファイルに追加しますtypings
  • typings.jsonへの参照を含むプロジェクトのルートフォルダーにファイルを追加しますcore-js(全体的にes6-shimatm より優れています)。

それでおしまい。

詳細については、この他のSOスレッドを調べたり、ブログのこの投稿を読んだりすることもできます。


2

開発ブランチを現在のブランチにマージした後、このエラーが発生しました。私は問題を修正するためにしばらく過ごしました。下の画像を見るとわかるように、コードにはまったく問題ありません。

ここに画像の説明を入力してください

だから私のために働いた唯一の修正は、VSCode再起動することです


0

次に、それらを手動でインポートする必要があります。

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)
        );

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.