Angular 2找不到Promise,Map,Set和Iterator

在安装angular 2之后,我的脚本编译器不断收到有关找不到Promise,Map,Set和Iterator的错误。 直到现在我忽略了他们,但现在我需要承诺,所以我的代码将工作。

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 

错误:

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

angular色RC4 – Angular ^ 2.0.0与Typescript 2.0.0

更新9/19/2016

为了得到这个与打字稿2.0.0,我做了以下。

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

更多关于@types与打字稿2.0.0。

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

安装示例:

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

重复的标识符错误

这很可能是因为重复的ecmascript 6types已经从其他地方(最有可能是旧的es6-shim)导入。

仔细检查typings.d.ts确保没有引用es6 。 如果有的话,请从types目录中删除对es6引用。

例如:

这将与typings.json中的types:['core-js']冲突。

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

tsconfig.json的types数组中包含core-js应该是唯一的地方。

Angular CLI 1.0.0-beta.30

如果您正在使用Angular-CLI,请移除typings.json中的lib数组。 这似乎与在types中声明core-js相冲突。

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

Webstorm / Intellij用户使用Angular CLI

确保内置的打字稿编译器被禁用。 这将与CLI发生冲突。 要使用CLI编译打字稿,您可以设置ng serveconfiguration。

在这里输入图像描述

Tsconfig compilerOptions库与types

如果您不想安装核心jstypes定义,那么随打字机一起提供一些es6库。 这些通过tsconfig中的lib: []属性来使用。

看这里例如: https : //www.typescriptlang.org/docs/handbook/compiler-options.html

注意:如果未指定–lib,则会注入默认库。 注入的默认库为:►用于–target ES5:DOM,ES5,ScriptHost►用于–target ES6:DOM,ES6,DOM.Iterable,ScriptHost

TL;博士

简短回答"lib": [ "es6", "dom" ]"types": ["core-js"]可以用来解决can't find Promise,Map, Set and Iterator 。 然而,使用这两个会导致重复标识符错误

我也有同样的问题 – “未find承诺” – 当代码想创build一个Promise对象。

尝试了一些在stackoverflow上find的解决scheme,包括取出System.config({…})来形成system.js并将其包含在index.html中。

最后我解决了这个问题。 问题是,在index.html中包含了es6-shim.min.js。 但是,在tsconfig.json中,“compilerOptions”下的“target”属性的值为“es5”。 我把它改成“es6”后,错误消失了。

angular2决赛

– es5支持 (与TS 2.0.0 +完美配合)

每次更新es6-shim现在不受支持,如果您将两个typeses6-shimcore-js一起安装在一起。 通过在tsconfig.json中提到删除es6-shim键入。 你现在可以参考下面的core-jsmain.tsinputes5支持

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

– es6支持

你只需要将"target"属性设置为es6 ,那么所有的错误都会消失。 所编译的代码将采用es6格式。

更新为angular-2.0.0-rc.4

TLDR;

  1. 运输到es6

    • 错误消失(有一些陷阱)。
  2. 运输到es5

    • 安装打字
    • 安装es6垫片
    • 确保它与您的代码编译。
    • 错误消失。

对于读者来说:

选项1:转储到es6或es2015

tsconfig.json:

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

请记住, uglifyjs目前不支持es6 。 这可能会影响您制作捆绑产品。

选项2:转储到es5,安装types,然后安装es6-shim:

tsconfig.json:

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

安装types,然后安装es6-shim:

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

如果你走这条路线,你需要确保打字稿编译器能find.d.ts文件。

你有两个select:

一个。 确保您的tsconfig.json与typings文件夹处于同一级别。

湾 在您的main.ts文件中包含一个引用,其中引导您的angular2应用程序。

选项A:确保您的tsconfig.json与typings文件夹处于同一级别。

注意:不要使用排除标志来排除打字文件夹。

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

选项B:引导之前在主文件中引用(不要这样做):

如其他答案所示,Angular不再包含此文件

main.ts:

 /// <reference path="../../typings/globals/es6-shim/index.d.ts" /> 

这是为我工作。

检查是否存在typings.json文件,

它看起来像这样,

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

安装打字包全球。

 sudo npm install -g typings 

安装打字后 ,运行

 typings install 

然后重新启动服务器。

我有类似的问题,它不承认Promise.resolve()方法。 我在tsconfig.json中将 “目标”值从ES5改为ES6 。 这解决了这个问题。

希望这可以帮助。

当Typescript> = 2时,tsconfig.json中的“lib”选项将完成这项工作。 没有需要的types。 https://www.typescriptlang.org/docs/handbook/compiler-options.html

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

由于Angular 2去了RC 0,所以/angular2/typings/browser.d.ts不再是Angular 2发行版的一部分。 该文件可以单独安装。

从这里: https : //github.com/angular/angular/issues/8513有几个选项。 那个为我工作的人是:

 typings install es6-shim --ambient --save // In your app.ts /// <reference path="typings/browser.d.ts" /> 

如果使用types为v1.0的Angular2 RC1,请使用以下命令:

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

安装core-js定义,然后在你的main.ts中引用你的全局索引:

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

如果使用es6-shim或其他一些shim库,请改为安装types

请参阅https://github.com/typings/typings/issues/517

我设法解决这个问题,而不必添加任何三斜杠参考TS引导文件,更改为ES6(带来了一堆问题,就像@DatBoi说)更新VS2015的NodeJS和/或NPM捆绑版本或安装types全球。

以下是我在几个步骤中所做的:

  • 在项目的package.json文件中添加types。
  • 在每个NPM操作之后,在package.json文件中添加一个script块来执行/更新types。
  • 在项目的根文件夹中添加了一个typings.json文件,其中包含对core-js的引用,这是目前修复ES5 / ES6问题的最好的填​​充/填充软件包之一。

以下是package.json文件的外观(仅适用于相关行):

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

这里是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" } } 

JasmineNode不是必需的,但我build议让他们以防将来需要)。

这个修复与Angular2 RC1到RC4的工作正常,这是我所需要的,但我认为它也将解决与其他启用ES6的库软件包类似的问题。

AFAIK,我认为这是修复VS2015默认设置的最简洁的方法。

有关更多信息和问题的详细分析,我也build议阅读这篇文章 。

在我的类中创build承诺对象时,我遇到了同样的问题。 通过从“es6”更改目标名称为“es5”解决了我的问题。

另一个可能的解决scheme是重新安装types:
这适用于"angular2": "2.0.0-beta.15"

  1. npm clean cache
  2. npm install
  3. npm install -g typings
  4. 从项目中删除types目录(Directory wings typings modules are installed)
  5. typings install
  6. npm run

另一个好方法 你需要在项目的根目录下创build一个文件typings.json,内容是:

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

然后安装全球或本地打字包,如果没有安装(我安装它全球):

 sudo npm install --global typings 

在项目根目录运行命令:

 typings install 

之后问题解决了。 不需要将tsconfig目标更改为es6或es7。 您的networking应用程序不支持一些老版本的浏览器。

我发现boot.ts中的引用不是正确的path。 将path更新为/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />解决了Promise错误。

我得到了同样的问题,并能够find它在github https://github.com/angular/angular-cli/issues/1901 ,其中指出,这是与typescript@2.0.2问题。

在全球和本地将打字稿降级到2.0.0帮助我解决了这个问题。

全球:

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

本地:进入你新build的项目文件夹

 npm uninstall typescript npm cache clean npm install typescript@2.0.0 

我还将package.json中的typescript版本从^2.0.0更改为2.0.0 ,但在降级本地打字稿安装之前,它不工作。

我正在用angular2教程(英雄)进行训练。
安装@ types / core-js在这些答案中评论后,我得到了一个“重复的标识符”错误。
在我的情况下,它解决了在tsconfig.json中删除lib行。

//“lib”:[“es2015”,“dom”]

我的文件结构如下:

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

粘贴到你的app.ts的顶部,你的问题解决了

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