角度:找不到Promise,Map,Set和Iterator

2020/10/22 04:21 · javascript ·  · 0评论

安装角之后,打字稿编译器的愈来愈约没有找到一些错误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'.

带有打字稿^ 2.0.0的Angular 5

这也应与Angular 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"
    ]
  }

有关带有打字稿2.0.0的@types的更多信息。

  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以确保没有对的引用es6es6如果有引用,请从您的打字目录中删除所有引用

例如:

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

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

包括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"]

使用Angular CLI的Webstorm / Intellij用户

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

在此处输入图片说明

TSConfig编译器选项lib vs类型

如果您不想安装核心js类型定义,则typescript附带了一些es6库。这些通过lib: []tsconfig中属性使用

参见此处的示例:https : //www.typescriptlang.org/docs/handbook/compiler-options.html

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

tl; dr

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

当代码要创建Promise对象时,我也遇到同样的问题-“找不到Promise”。

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

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

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

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;

  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,安装输入内容,然后安装es6-shim:

tsconfig.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与Types文件夹处于同一级别。

b。在main.ts文件中包含一个引用,用于引导您的angular2应用程序。

选项A:确保您的tsconfig.json与打字文件夹位于同一级别。

注意:请勿使用exclude标志来排除类型文件夹。

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

选项B:引导前在主文件中进行引用(请勿这样做):

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

main.ts:

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

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

这对我有用。

检查是否存在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那解决了问题。

希望这可以帮助。

由于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" />

我设法解决了这个问题,而不必在TS引导程序文件中添加任何三斜杠引用,更改为ES6(这会带来很多问题,正如@DatBoi所说)来更新VS2015NodeJS和/或NPM捆绑的版本或typings在全球范围内安装

这是我在几个步骤中所做的事情:

  • 添加typings在项目package.json文件中。
  • scriptpackage.json文件中添加了一个以执行/更新typings在每个NPM操作之后
  • 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不是必需的,但我建议保留它们,以备日后需要时使用)。

我需要的是此修复程序与Angular2 RC1到RC4的配合正常,但是我认为它也可以解决其他支持ES6的库程序包中的类似问题。

AFAIK,我认为这是在不破坏VS2015默认设置的情况下解决问题的最简洁的方法。

有关此问题的更多信息和详细分析,我也建议您在我的博客上阅读此文章

如果将Angular2 RC1与v1.0 +一起使用,请使用以下命令:

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

我注意到从Angular 5升级到Angular 6后出现了这些问题。我能够通过在VS2017中执行以下操作来解决此问题:

  • 确保为我的特定版本2.9的TypeScript安装了TypeScript SDK(通过Visual Studio安装程序)
  • 确保将“模块系统”项目属性设置为与我的tsconfig.json中的属性匹配:ES2015。如果tsconfig文件位于项目的根目录中,则通常会自动同步。但是,由于我使用的是VS Angular模板,因此将这些文件放在“ ClientApp”子文件夹中,并且未设置“模块系统”项目属性。

VS2017项目属性

tsconfig.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": "./"
  }
}

在类中创建一个Promise对象时,我遇到了同样的问题。通过将目标名称从“ es6”更改为“ es5”,解决了我的问题。

另一种可能的解决办法是重新安装分型:

这工作对我来说
"angular2": "2.0.0-beta.15"

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

另一个好的解决方案。您需要在项目的根目录中创建一个内容为“ types.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应用程序不支持该旧版本的浏览器。

如果您是因为在Visual Studio 2017中看到这些错误而来这里的,那么如果您成功编译,则会遇到上述其他问题。这是因为语言服务没有选择您的tsconfig.json。

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

您必须将tsconfig.json的“构建操作”设置为“内容”(右键单击->“属性”),然后VS将其选中。

我发现boot.ts中的引用不是正确的路径。更新该路径以/// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />解决Promise错误。

我正在使用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" />

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

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

npm uninstall typescript
npm cache clean
npm install typescript@2.0.0

我也将package.json中的Typescript版本从^2.0.0更改为2.0.0,但是直到我降级了本地Typescript安装后,该版本才起作用。

本文地址:http://javascript.askforanswer.com/jiaoduzhaobudaopromisemapsetheiterator.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!