在安装Angular之后,Typescript编译器不断发现一些关于找不到 Promise
, Map
, Set
和 Iterator
的错误 .
到现在为止我忽略了它们,但现在我需要 Promise
所以我的代码可以工作 .
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
The errors:
................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'.
19 回答
如果使用带有类型v1.0的Angular2 RC1,请使用以下命令:
安装core-js定义,然后在main.ts中引用你的全局索引:
如果使用es6-shim或其他一些填充库,请为其安装类型
参考https://github.com/typings/typings/issues/517
由于Angular 2进入RC 0,/ angular2 /typings / broowser.d.ts不再是Angular 2发行版的一部分 . 该文件可以单独安装 .
从这里:https://github.com/angular/angular/issues/8513有几个选项 . 对我有用的是:
在我的类中创建一个promise对象时遇到了同样的问题 . 通过将目标名称从“es6”更改为“es5”解决了我的问题 .
Angular 5 with Typescript ^ 2.0.0
这也应该与早期版本的Angular 2一样 .
为了使用这个与typescript 2.0.0一起工作,我做了以下工作 .
npm install --save-dev @types/core-js
tsconfig.json
More about @types with typescript 2.0.0.
https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/
https://www.npmjs.com/~types
安装示例:
Duplicate Identifier errors
这很可能是因为重复的ecmascript 6类型已经从其他地方导入,很可能是旧的es6-shim .
仔细检查
typings.d.ts
确保没有对es6
的引用 . 如果您有,请从您的typings目录中删除对es6
的任何引用 .For Example:
这将与typings.json中的
types:['core-js']
冲突 .在
tsconfig.json
中的types数组中包含core-js
应该是从中导入的唯一位置 .Angular CLI 1.0.0-beta.30
如果您使用的是Angular-CLI,请删除
typings.json
中的lib数组 . 这似乎与在类型中声明core-js相冲突 .Webstorm/Intellij Users using the Angular CLI
确保禁用内置的typescript编译器 . 这将与CLI冲突 . 要使用CLI编译您的打字稿,您可以设置
ng serve
配置 .Tsconfig compilerOptions lib vs types
如果您不想安装核心js类型定义,那么typescript会包含一些es6库 . 这些是通过tsconfig中的
lib: []
属性使用的 .请看这里例如:https://www.typescriptlang.org/docs/handbook/compiler-options.html
tl;dr
简短回答
"lib": [ "es6", "dom" ]
或"types": ["core-js"]
可用于解析can't find Promise,Map, Set and Iterator
. 但是,使用它们会导致重复的标识符错误这对我有用 .
检查是否存在 typings.json 文件,
全局安装打字包 .
安装 typings 后,运行
然后重启服务器 .
如果您因为在Visual Studio 2017中看到这些错误而来到这里,那么如果您成功编译,则会遇到与上述不同的问题 . 这是因为语言服务不会选择你的tsconfig.json .
https://developercommunity.visualstudio.com/content/problem/208941/vs-156-ignores-tsconfigjson-and-typescriptcompileb.html
您必须将tsconfig.json的Build Action设置为“Content”(右键单击 - > Properties),然后VS将接收它 .
我注意到从Angular 5升级到Angular 6后出现了这些问题 . 我能够通过在VS2017中执行以下操作来解决这个问题:
确保为我的特定版本的TypeScript 2.9安装了TypeScript SDK(通过Visual Studio Installer)
确保将Module System项目属性设置为与我的tsconfig.json中的属性相匹配:ES2015 . 如果tsconfig文件位于项目的根目录中,则通常会自动同步 . 但是,由于我使用的是VS Angular模板,因此它将这些文件放在"ClientApp"子文件夹中,并且未设置Module System项目属性 .
tsconfig.json:
角度2决赛
- es5支持(与TS 2.0.0完美配合)
如果您同时将两个类型安装在一起
es6-shim
和core-js
,则现在不支持每次更新es6-shim
. 通过在tsconfig.json中提及删除es6-shim
类型 . 您现在可以在main.ts
中为es5
支持下面的core-js
输入tsconfig.json
- es6 suppport
你只需要将
"target"
属性设置为es6
,然后所有错误都会消失 . 并且转换后的代码将采用es6
格式 .我遇到了同样的问题,并且能够在github https://github.com/angular/angular-cli/issues/1901中找到它,这表明这是
typescript@2.0.2
的一个问题 .将打字稿降级到
2.0.0
全球和本地帮助我解决它 .全球:
本地:进入你用ng new创建的项目文件夹
我还将package.json中的typescript版本从
^2.0.0
更改为2.0.0
,但是在我降级本地typescript安装之前它没有用 .我也有同样的问题 - “未找到承诺” - 当代码想要创建一个Promise对象时 .
尝试在stackoverflow上找到一些解决方案,包括取出System.config()以形成system.js并将其包含在index.html中的解决方案 .
最后我解决了这个问题 . 问题是,在index.html中,包含了es6-shim.min.js . 但是,在tsconfig.json中,“compilerOptions”下的“target”属性的值为“es5” . 在我将其更改为“es6”后,错误消失了 .
另一个好方案 . 您需要在root中创建一个文件typings.json包含内容的项目目录:
然后安装全局或本地打字包,如果没有安装(我安装全局):
在项目根目录运行命令中:
在那个问题解决之后 . 不需要将tsconfig目标更改为es6或es7 . 在某些旧版本的浏览器之后,您的Web应用程序不支持 .
我发现boot.ts中的引用不是正确的路径 . 将该路径更新为
/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />
解决了Promise错误 .更新为angular-2.0.0-rc.4
TLDR;
Transpile to es6
错误消失(带有一些陷阱) .
Transpile to es5
安装打字
安装es6垫片
确保它与您的代码一起编译 .
错误消失了 .
对于读者:
选项1:透明到es6或es2015
tsconfig.json:
请记住uglifyjs does not support es6 at the moment . 这可能会影响您制作 生产环境 包 .
选项2:透明到es5,安装打字,然后安装es6-shim:
tsconfig.json:
安装打字,然后安装es6-shim:
If you go this route, you need to make sure that the typescript compiler can find the .d.ts file.
你有两个选择:
一个 . 确保您的tsconfig.json与typings文件夹处于同一级别 .
湾在main.ts文件中包含一个引用,其中您的angular2应用程序是自举的 .
选项A:确保您的tsconfig.json与typings文件夹处于同一级别 .
注意:请勿使用exclude标志排除typings文件夹 .
选项B:在引导程序之前在主文件中引用(不要这样做):
如其他答案所示,Angular不再包含此文件
main.ts:
我有类似的问题,它没有识别 Promise.resolve() 方法 . 我在 tsconfig.json 中将 "target" 值从ES5更改为 ES6 . 这解决了这个问题 .
希望这可以帮助 .
另一种可能的解决方案是重新安装类型:
"angular2": "2.0.0-beta.15"
这对我有用npm clean cache
npm install
npm install -g typings
从项目中删除
typings
目录(安装了打包模块的目录)typings install
npm run
我正在训练一个angular2教程(英雄) .
安装@ types / core-js在这些答案中注释后,我收到了"Duplicate identifier"错误 .
在我的例子中,它被解决为删除tsconfig.json中的lib行 .
当Typescript> = 2时,tsconfig.json中的"lib"选项将完成这项工作 . 不需要打字 . https://www.typescriptlang.org/docs/handbook/compiler-options.html
我设法解决了这个问题,而无需向TS引导文件添加任何三斜杠引用,更改为ES6(这带来了一堆问题,就像@DatBoi所说)更新VS2015的
NodeJS
和/或NPM
捆绑构建或全局安装typings
.这是我在几个步骤中所做的:
在项目的
package.json
文件中添加了typings
.在
package.json
文件中添加了script
块,以便在每次NPM操作后执行/更新typings
.在项目的根文件夹中添加了一个
typings.json
文件,其中包含对core-js
的引用,这是目前修复ES5 / ES6问题的最好的shim / polyfill软件包之一 .以下是
package.json
文件的外观(仅限相关行):这是
typings.json
文件:(
Jasmine
和Node
不是必需的,但我建议保留它们以防将来需要) .这个修复程序适用于Angular2 RC1到RC4,这是我需要的,但我认为它也将修复与其他支持ES6的库包的类似问题 .
AFAIK,我认为这是解决它的最简洁方法,而不会弄乱VS2015的默认设置 .
有关该问题的更多信息和详细分析,我还建议在我的博客上使用read this post .
我的文件结构如下:
将以下内容粘贴到app.ts的顶部,您的问题就解决了