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。
- https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/
- 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 serve
configuration。
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-shim
和core-js
一起安装在一起。 通过在tsconfig.json中提到删除es6-shim
键入。 你现在可以参考下面的core-js
在main.ts
inputes5
支持
///<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;
-
运输到es6
- 错误消失(有一些陷阱)。
-
运输到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
我设法解决这个问题,而不必添加任何三斜杠参考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" } }
( Jasmine
和Node
不是必需的,但我build议让他们以防将来需要)。
这个修复与Angular2 RC1到RC4的工作正常,这是我所需要的,但我认为它也将解决与其他启用ES6的库软件包类似的问题。
AFAIK,我认为这是修复VS2015默认设置的最简洁的方法。
有关更多信息和问题的详细分析,我也build议阅读这篇文章 。
在我的类中创build承诺对象时,我遇到了同样的问题。 通过从“es6”更改目标名称为“es5”解决了我的问题。
另一个可能的解决scheme是重新安装types:
这适用于"angular2": "2.0.0-beta.15"
-
npm clean cache
-
npm install
-
npm install -g typings
- 从项目中删除types目录(Directory wings typings modules are installed)
-
typings install
-
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" />
- 构build时,Android dex提供了一个BufferOverflowException
- replace为不推荐-sizeWithFont:constrainedToSize:lineBreakMode:在iOS 7中?