角度: 无法找到承诺,地图,设置和迭代器

在安装了 Angular 之后,Type 脚本编译器不断出现一些错误,比如没有找到 PromiseMapSetIterator

直到现在,我忽略了他们,但现在我需要 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

错误在于:

................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'.
121037 次浏览

角度2决赛

- es5支持 (与 TS 2.0.0 + 一起完美工作)

现在不支持每次更新 es6-shim,如果您将 es6-shimcore-js两种类型安装在一起。通过在 tsconfig.json 中提及来删除 es6-shim类型。您现在可以参考下面的 core-js类型以获得 main.ts内部的 es5支持

///<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格式。

当代码想要创建一个噪音对象时,我也遇到了同样的问题——“找不到噪音”。

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

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

我发现 boot.ts 中的引用不是正确的路径。

自从 Angular 2进入 RC 0,/angular2/typeings/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" />

如果在输入 v1.0 + 时使用 Angular2 RC1,请使用以下命令:

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

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

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

如果使用 es6-shim 或其他一些 shim 库,则改为安装该类型的输入

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

在我的类中创建一个承诺对象时也遇到了同样的问题。 把目标名从“ es6”改成“ es5”解决了我的问题。

我就是这么做的。

检查是否存在 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

然后重启服务器。

我的档案结构如下:

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

将下面的内容粘贴到应用程序的顶部,问题就解决了

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

另一个可能的解决方案是重新安装类型:
我在 "angular2": "2.0.0-beta.15"工作

  1. npm clean cache
  2. npm install
  3. npm install -g typings
  4. 从 project 中删除 typings目录(安装键入模块的目录)
  5. typings install
  6. npm run

更新为角 -2.0.0-rc.4

极低密度辐射;

  1. 翻译到 es6

    • 错误消失了(我们遇到了一些麻烦)。
  2. 翻转到 es5

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

读者朋友们:

备选案文1: 转至 es6或 es2015

Json:

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

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

选项2: 传送到 es5,安装打字机,然后安装 es6-shim:

Json:

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

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

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

如果您采用这种方法,您需要确保类型脚本编译器可以找到. d.ts 文件。

你有两个选择:

确保 tsconfig.json 与类型文件夹处于同一级别。

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

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

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

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

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

如其他答案所示,这个文件不再包含在角度

主要内容:

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

我成功地解决了这个问题,而不需要在 TS 引导文件中添加任何三斜杠引用,更改为 ES6(正如 @ DatBoi所说,这会带来一系列问题)更新 VS2015的 NodeJS和/或 NPM捆绑构建,或者在全球范围内安装 typings

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

  • 在项目的 package.json文件中添加了 typings
  • package.json文件中添加一个 script块,以便在每次 NPM 操作之后执行/更新 typings
  • 在项目的根文件夹中添加了一个 typings.json文件,其中包含对 core-js的引用,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,但我建议保留它们,以备将来需要)。

这个修复程序在 Angular2 RC1到 RC4之间运行良好,这正是我所需要的,但是我认为它也会修复其他启用 ES6的库包的类似问题。

AFAIK,我认为这是最干净的可能的方式来修复它,而不搞乱 VS2015的默认设置。

为了更多的信息和问题的详细分析,我也建议在我的博客 读读这篇文章

角度5和类型 ^ 2.0.0

这同样适用于角度2 + 的早期版本。

为了让它与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"
]
}

更多关于@type 的信息,请参见2.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 6类型已经从其他地方导入,很可能是一个旧的 es6-shim。

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

例如:

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

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

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

角度 CLI 1.0.0-Beta 30

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

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

使用角度 CLI 的 Webstorm/Intellij 用户

确保禁用了内置的类型脚本编译器。这将与 CLI 发生冲突。要使用 CLI 编译您的类型脚本,您可以设置一个 ng serve配置。

enter image description here

选项库与类型

如果您不想安装核心 js 类型定义,那么有一些 es6库可以随类型脚本一起使用。它们通过 tsconfig 中的 lib: []属性使用。

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

注意: 如果没有指定—— lib,则会注入一个默认库 目标 ES5: DOM,ES5,ScriptHost 目标 ES6: DOM,ES6,DOM.Iterable,ScriptHost

Tl; dr

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

我有类似的问题,它不承认 承诺,决心方法。我将 Tsconfig.json中的 目标值从 ES5改为 ES6。问题解决了。

希望这个能帮上忙。

我得到了同样的问题,并且能够在 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

本地: 进入 ngnew 创建的项目文件夹

npm uninstall typescript
npm cache clean
npm install typescript@2.0.0

我还将 package.json 中的类型脚本版本从 ^2.0.0更改为 2.0.0,但是直到我降低了本地类型脚本安装的等级,它才能正常工作。

另一个好办法。 您需要在 project 的根目录中创建一个文件 typeings.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。您的 Web 应用程序在此之后不支持一些旧版本的浏览器。

我正在接受角度训练(英雄)。
在这些答案中安装了@type/core-js 注释之后,我得到了一个“重复标识符”错误。
在我的例子中,解决方案是删除 tsconfig.json 中的 lib 行。

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

当类型 > = 2时,tsconfig.json 中的“ lib”选项将完成这项工作

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

如果您来到这里是因为您在 VisualStudio2017中看到了这些错误,那么如上所述,如果您成功编译,则会遇到不同的问题。这是因为语言服务没有选择 tsconfig.json。

Https://developercommunity.visualstudio.com/content/problem/208941/vs-156-ignores-tsconfigjson-and-typescriptcompileb.html

您必须将 tsconfig.json 的 Build Action 设置为“ Content”(右键单击-> Properties) ,然后 VS 会拾取它。

我注意到这些问题出现后,从角5升级到角6。我可以通过在 VS2017中执行以下操作来解决这个问题:

  • 确保为我的特定版本 TypeScript 2.9安装了 TypeScript SDK (通过 Visual Studio Installer)
  • 确保 Module System 项目属性设置为与我的 tsconfig.json: ES2015中的属性匹配。如果 tsconfig 文件位于项目的根目录中,这通常会自动同步。但是,因为我使用的是 VS Angular 模板,所以它将这些文件放在“ ClientApp”子文件夹中,而且没有设置 Module System 项目属性。

VS2017 Project Properties

Json:

{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"lib": [
"es2017",
"dom"
],
"module": "es2015",
"baseUrl": "./"
}
}