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

IT技术 javascript angular typescript
2021-02-11 05:19:28

安装角之后,typescript编译器的愈来愈约没有找到一些错误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'.
6个回答

带有typescript ^2.0.0 的 Angular 5

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

为了使其与 typescript 2.0.0 一起使用,我执行了以下操作。

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

配置文件

 "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 和 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

重复标识符错误

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

仔细检查typings.d.ts确保没有对es6. es6如果你有的话从你的打字目录中删除任何引用

例如:

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

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

包括core-js在类型数组中tsconfig.json应该是它导入的唯一位置。

Angular CLI 1.0.0-beta.30

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

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

使用 Angular CLI 的 Webstorm/Intellij 用户

确保禁用内置的typescript编译器。这将与 CLI 冲突。要使用 CLI 编译您的typescript,您可以设置一个ng serve配置。

在此处输入图片说明

Tsconfig compilerOptions lib 与类型

如果您不想安装核心 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但是,同时使用两者会导致重复标识符错误。

感谢您的更新和好的答案。我接受了你的回答,因为直到现在人们仍然来这里解决这个错误。你有没有机会更新你对 RC 5 的回答?我正面临这个错误,按照你的回答,我能够使用 promise,但现在 node_modules\@types\es6-shim\index.d.ts 文件中有很多错误:“重复标识符‘PropertyKey’。” 行中:6,10,248,283,290 等等;.. 也有错误:C:\Users\armyTik\Desktop\rc5\store-app-02\node_modules\typescript\lib\lib.es2015.core.d.ts:17 :13 重复标识符“PropertyKey”。
2021-03-13 05:19:28
我更新了我的答案。希望这有助于澄清一些事情。我相信这对于 RC5 和 RC4 应该是相同的。
2021-03-23 05:19:28
可能,lib 是更好的解决方案。github.com/angular/angular/blob/...
2021-03-23 05:19:28
感谢更新。这次我没有运气。我更新了我当前的错误。
2021-03-25 05:19:28
我还更改了它以仅反映 core-js,因此希望它不那么令人困惑。core-js 和 es6 都用于 es6 特定的类型声明。我更喜欢 core-js,因为它似乎比 es6-shim 涵盖的更多。
2021-04-12 05:19:28

我也有同样的问题——“找不到Promise”——当代码想要创建一个 Promise 对象时。

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

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

这也是我的问题。有谁知道为什么这会导致该错误?
2021-03-14 05:19:28
还修复了我在 IntelliJ IDEA / WebStorm 中收到的错误
2021-03-22 05:19:28
谢谢!你为我节省了很多时间
2021-03-23 05:19:28
但是 js 代码必须转译为 es5,因为并非所有浏览器都为 es6 做好了准备。有没有人在不同的浏览器中遇到过 es6 问题。谢谢!
2021-03-24 05:19:28
在 angular2.1.0 上对我有用。编译器 2.1.0 核心 2.1.0 common2.1.0 rxjs5.0.0-beta.12 platform-b​​rowser2.1.0
2021-04-12 05:19:28

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

配置文件

exclude: [
   "node_modules", //<-- this would be needed in case of VS2015
   "node_modules/@typings",
   "typings"
]

- es6 支持

您只需要将"target"属性设置es6,然后所有错误都会消失。转换后的代码将采用es6格式。

非常感谢你。我没有机会自己找到。
2021-03-29 05:19:28
如果您在快速入门教程中使用项目设置,则应安装 beta.7。您使用 Angular 的哪个 Beta 版?我确认了 angular 2.0.0 beta.7 的重大变化
2021-03-29 05:19:28
快速入门教程中的 package.json 支持 angular 2 的实际版本。如果你复制 package.json。tscconfig.json 和 typings.json 到您的项目根目录并调用 npm -install project setup 就可以了。
2021-04-09 05:19:28
@PankajParkar 2.0.0-rc.1几天前我才开始使用 Angular,我通过入门文档 [here]() 工作。package.json他们把"angular2-in-memory-web-api": "0.0.7"和其余有角的东西来自"@angular/<module>": "2.0.0-rc.1"哪里<module>commoncompilercorehttpplatform-browserplatform-browser-dynamicrouterrouter-deprecatedupgrade
2021-04-09 05:19:28
@StavAlfi np.. 发生了.. 很高兴为您提供帮助.. 谢谢:)
2021-04-10 05:19:28

更新自 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,安装typings,然后安装es6-shim:

tsconfig.json:

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

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

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

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

您有两个选择:

一个。确保您的 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" />
谢谢,1 工作。需要 core-js 或 es6-shim(不是两者)。然后在 ts 编译过程中包含 ./typings/index.d.ts 。
2021-03-16 05:19:28
typings应该全局安装吗?
2021-03-22 05:19:28
选项 1 非常适合 RC4。确保删除提供 Promise、Map 等的 core-js 和其他类型,以避免命名空间冲突。
2021-03-23 05:19:28
--saveDev暂时不起作用。--save-dev做。
2021-04-11 05:19:28

当 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)
    }
}