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

Sta*_*lfi 170 javascript typescript angular

安装角之后,打字稿编译器不断收到一些错误约没有找到Promise,Map,SetIterator.

到现在为止我忽略了它们,但现在我需要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
Run Code Online (Sandbox Code Playgroud)

错误:

................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'.
Run Code Online (Sandbox Code Playgroud)

Kri*_*eck 176

Angular 5 with Typescript ^ 2.0.0

这也应该与早期版本的Angular 2+相同.

为了使用这个与typescript 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"
    ]
  }
Run Code Online (Sandbox Code Playgroud)

有关@types与typescript 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
Run Code Online (Sandbox Code Playgroud)

重复的标识符错误

这很可能是因为重复的ecmascript 6类型已经从其他地方导入,很可能是旧的es6-shim.

仔细检查typings.d.ts确保没有参考es6.es6如果您有,请从您的typings目录中删除任何引用.

例如:

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

{
  "globalDependencies": {
    "core-js": "registry:dt/core-js#0.0.0+20160602141332" 
    // es6-shim will also conflict
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Angular CLI 1.0.0-beta.30

如果您使用的是Angular-CLI,请删除中的lib数组typings.json.这似乎与在类型中声明core-js相冲突.

"compilerOptions" : {
  ...
  // removed "lib": ["es6", dom"],
  ...
},
"types" : ["core-js"]
Run Code Online (Sandbox Code Playgroud)

使用Angular CLI的Webstorm/Intellij用户

确保禁用内置的typescript编译器.这将与CLI冲突.要使用CLI编译您的打字稿,您可以设置ng serve配置.

在此输入图像描述

Tsconfig compilerOptions lib vs types

如果您不想安装核心js类型定义,那么typescript中包含一些es6库.这些是通过lib: []tsconfig中的属性使用的.

请参阅此处:https://www.typescriptlang.org/docs/handbook/compiler-options.html

注意:如果未指定--lib,则会注入默认库.注入的默认库是:►For--target ES5:DOM,ES5,ScriptHost►For--target ES6:DOM,ES6,DOM.Iterable,ScriptHost

TL;博士

简短的回答"lib": [ "es6", "dom" ]或者"types": ["core-js"]可以用来解决can't find Promise,Map, Set and Iterator.但是,使用它们会导致重复的标识符错误

  • lib可能是更好的解决方案.https://github.com/angular/angular/blob/2b20db6c5acd60721e8a5dae2b50cdb1292f8db1/modules/%40angular/forms/tsconfig.json#L23 (2认同)

Dan*_*eng 75

我也有同样的问题 - "未找到承诺" - 当代码想要创建一个Promise对象时.

尝试在stackoverflow上找到一些解决方案,包括取出System.config({...})以形成system.js并将其包含在index.html中的解决方案.

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

  • 但是js代码必须转换为es5,因为并非所有浏览器都为es6做好准备.有没有人在不同的浏览器中遇到es6问题.Thankx! (5认同)
  • 这对我来说也是个问题.有谁知道为什么会导致这个错误? (2认同)

Pan*_*kar 63

Angular 2决赛

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

每次更新es6-shim不支持,现在,如果你有安装在一起的两条分型es6-shimcore-js在一起.es6-shim通过在tsconfig.json中提及删除键入.您现在可以参考下面的core-js输入以获得es5支持main.ts

///<reference path="./../typings/globals/core-js/index.d.ts"/>
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

exclude: [
   "node_modules", //<-- this would be needed in case of VS2015
   "node_modules/@typings",
   "typings"
]
Run Code Online (Sandbox Code Playgroud)

- es6 suppport

你只需要设置"target"属性es6,然后所有将错误消失.并且转换后的代码将采用es6格式化.

  • @PankajParkar`2.0.0-rc.1`.我几天前才开始使用Angular,虽然我开始使用docs [here]().在`package.json`中,他们放置了"angular2-in-memory-web-api":"0.0.7"`其余的角度来源于`"@ angular/<module>":"2.0. 0-rc.1"`其中`<module>`是`common`,`compiler`,`core`,`http`,`platform-b​​rowser`,`platform-b​​rowser-dynamic`,`router`,`router -deprecated`和`upgrade`. (3认同)

Nic*_*sta 42

更新为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"
  ]
}
Run Code Online (Sandbox Code Playgroud)

请记住,uglifyjs目前不支持es6.这可能会影响您制作生产包.

选项2:透明到es5,安装打字,然后安装es6-shim:

tsconfig.json:

{
  "compilerOptions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
     ...
  },
  "exclude": [
    "node_modules",
    "jspm_packages"
  ]
}
Run Code Online (Sandbox Code Playgroud)

安装打字,然后安装es6-shim:

npm install typings --saveDev
typings install dt~es6-shim --global --save
Run Code Online (Sandbox Code Playgroud)

如果你走这条路,你需要确保typescript编译器可以找到.d.ts文件.

您有两种选择:

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

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

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

注意:请勿使用exclude标志排除typings文件夹.

project
|-- src
|-- node_modules
|-- package.json
|-- typings
|-- tsconfig.json
Run Code Online (Sandbox Code Playgroud)

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

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

main.ts:

/// <reference path="../../typings/globals/es6-shim/index.d.ts" />
Run Code Online (Sandbox Code Playgroud)

  • 选项1适用于RC4.确保删除提供Promise,Map等的core-js和其他类型,以避免命名空间冲突. (2认同)

All*_*ітy 8

这对我有用.

检查是否存在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"
  }
}
Run Code Online (Sandbox Code Playgroud)

全局安装打字包.

sudo npm install -g typings
Run Code Online (Sandbox Code Playgroud)

安装打字后,运行

typings install
Run Code Online (Sandbox Code Playgroud)

然后重启服务器.


Nie*_*eek 8

当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)
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

我有类似的问题,它没有识别Promise.resolve()方法.我在tsconfig.json中将"目标"值从ES5 更改为ES6.这解决了这个问题.

希望这可以帮助.


Jam*_*mes 5

由于Angular 2进入RC 0,/ angular2 /typings/broowser.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" />
Run Code Online (Sandbox Code Playgroud)