Angular:找不到 Promise、Map、Set 和 Iterator [英] Angular: Can't find Promise, Map, Set and Iterator

查看:31
本文介绍了Angular:找不到 Promise、Map、Set 和 Iterator的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

安装Angular后,Typescript编译器不断报错,找不到PromiseMapSetIterator.

直到现在我都忽略了它们,但现在我需要 Promise 以便我的代码可以工作.

从'angular2/core'导入{Component};@成分({选择器:'问候-cmp',模板:`

{{ asyncGreeting |异步}}</div>`})导出类 GreetingCmp {asyncGreeting: Promise= 新承诺(解决 => {//1 秒后,promise 将解析window.setTimeout(() => resolve('hello'), 1000);});}附加信息:npm -v 是 2.14.12node -v 是 v4.3.1打字稿 v 是 1.6

错误:

……我的代码错误…………C:UsersarmyTikDesktopangular2greeting_cmp.ts错误:(7, 20) TS2304:找不到名称Promise".错误:(7, 42) TS2304:找不到名称Promise".………………………………………………………………………………………………………………………………………………………………………………C:UsersarmyTikDesktopangular2
ode_modulesangular2platformrowser.d.ts错误:(77, 90) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccoreapplication_ref.d.ts错误:(83, 60) TS2304:找不到名称Promise".错误:(83, 146) TS2304:找不到名称Promise".错误:(96, 51) TS2304:找不到名称Promise".错误:(96, 147) TS2304:找不到名称Promise".错误:(133, 90) TS2304:找不到名称Promise".错误:(171, 81) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorechange_detectionparserlocals.d.ts错误:(3, 14) TS2304:找不到名称地图".错误:(4, 42) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccoredebugdebug_node.d.ts错误:(14, 13) TS2304:找不到名称地图".错误:(24, 17) TS2304:找不到名称地图".错误:(25, 17) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorediprovider.d.ts错误:(436, 103) TS2304:找不到名称地图".错误:(436, 135) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorelinkercompiler.d.ts错误:(12, 50) TS2304:找不到名称Promise".错误:(16, 41) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorelinkerdynamic_component_loader.d.ts错误:(108, 136) TS2304:找不到名称Promise".错误:(156, 150) TS2304:找不到名称Promise".错误:(197, 128) TS2304:找不到名称Promise".错误:(203, 127) TS2304:找不到名称Promise".错误:(204, 141) TS2304:找不到名称Promise".错误:(205, 119) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccore
enderapi.d.ts错误:(13, 13) TS2304:找不到名称地图".错误:(14, 84) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadeasync.d.ts错误:(27, 33) TS2304:找不到名称Promise".错误:(28, 45) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadecollection.d.ts错误:(1, 25) TS2304:找不到名称MapConstructor".错误:(2, 25) TS2304:找不到名称SetConstructor".错误:(4, 27) TS2304:找不到名称地图".错误:(4, 39) TS2304:找不到名称地图".错误:(7, 9) TS2304:找不到名称地图".错误:(8, 30) TS2304:找不到名称地图".错误:(11, 43) TS2304:找不到名称地图".错误:(12, 27) TS2304:找不到名称地图".错误:(14, 23) TS2304:找不到名称地图".错误:(15, 25) TS2304:找不到名称地图".错误:(95, 41) TS2304:找不到名称Set".错误:(96, 22) TS2304:找不到名称Set".错误:(97, 25) TS2304:找不到名称Set".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadelang.d.ts错误:(13, 17) TS2304:找不到名称地图".错误:(14, 17) TS2304:找不到名称Set".错误:(78, 59) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadepromise.d.ts错误:(2, 14) TS2304:找不到名称Promise".错误:(7, 32) TS2304:找不到名称Promise".错误:(8, 38) TS2304:找不到名称Promise".错误:(9, 35) TS2304:找不到名称Promise".错误:(9, 93) TS2304:找不到名称Promise".错误:(10, 34) TS2304:找不到名称Promise".错误:(11, 32) TS2304:找不到名称Promise".错误:(11, 149) TS2304:找不到名称Promise".错误:(12, 43) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srchttpheaders.d.ts错误:(43, 59) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srchttpurl_search_params.d.ts错误:(11, 16) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcplatformrowserrowser_adapter.d.ts错误:(75, 33) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcplatformdomdom_adapter.d.ts错误:(85, 42) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modules
xjsCoreOperators.d.ts错误:(35, 67) TS2304:找不到名称Promise".错误:(50, 66) TS2304:找不到名称Promise".错误:(89, 67) TS2304:找不到名称Promise".错误:(94, 38) TS2304:找不到名称Promise".错误:(94, 50) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modules
xjsObservable.d.ts错误:(46, 62) TS2304:找不到名称Promise".错误:(47, 42) TS2304:找不到名称迭代器".错误:(103, 74) TS2304:找不到名称Promise".错误:(103, 84) TS2304:找不到名称Promise".错误:(143, 66) TS2304:找不到名称Promise".错误:(158, 65) TS2304:找不到名称Promise".错误:(201, 66) TS2304:找不到名称Promise".错误:(206, 38) TS2304:找不到名称Promise".错误:(206, 50) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modules
xjsobservableForkJoinObservable.d.ts错误:(6, 50) TS2304:找不到名称Promise".错误:(7, 58) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modules
xjsobservableFromObservable.d.ts错误:(7, 38) TS2304:找不到名称Promise".错误:(7, 51) TS2304:找不到名称迭代器".C:UsersarmyTikDesktopangular2
ode_modules
xjsobservablePromiseObservable.d.ts错误:(9, 31) TS2304:找不到名称Promise".错误:(10, 26) TS2304:找不到名称Promise".

解决方案

Angular 5 with Typescript ^2.0.0

这也适用于早期版本的 Angular 2+.

为了让它与 typescript 2.0.0 一起工作,我做了以下工作.

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

tsconfig.json

 "compilerOptions": {声明":假,emitDecoratorMetadata":真,"experimentalDecorators": 真,"mapRoot": "./",模块":es6","moduleResolution": "节点",noEmitOnError":真,noImplicitAny":假,"outDir": "../dist/out-tsc",源地图":真,目标":es5",类型根":[../node_modules/@types"],类型":[核心js"]}

更多关于@types 和 typescript 2.0.0.

  1. Tsconfig compilerOptions lib 与类型

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

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

    <块引用>

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

    tl;博士

    简答 "lib": [ "es6", "dom" ]"types": ["core-js"] 可用于解析找不到 Promise、Map、Set 和 Iterator.但是,同时使用两者会导致重复标识符错误.

    After installing Angular, the Typescript compiler keep getting some errors about not finding Promise, Map, Set and Iterator.

    Until now I ignored them but now I need Promise so my code can work.

    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:UsersarmyTikDesktopangular2greeting_cmp.ts
        Error:(7, 20) TS2304: Cannot find name 'Promise'.
        Error:(7, 42) TS2304: Cannot find name 'Promise'.
        .........................................
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2platformrowser.d.ts
        Error:(77, 90) TS2304: Cannot find name 'Promise'.
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2srccoreapplication_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:UsersarmyTikDesktopangular2
    ode_modulesangular2srccorechange_detectionparserlocals.d.ts
        Error:(3, 14) TS2304: Cannot find name 'Map'.
        Error:(4, 42) TS2304: Cannot find name 'Map'.
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2srccoredebugdebug_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:UsersarmyTikDesktopangular2
    ode_modulesangular2srccorediprovider.d.ts
        Error:(436, 103) TS2304: Cannot find name 'Map'.
        Error:(436, 135) TS2304: Cannot find name 'Map'.
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2srccorelinkercompiler.d.ts
        Error:(12, 50) TS2304: Cannot find name 'Promise'.
        Error:(16, 41) TS2304: Cannot find name 'Promise'.
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2srccorelinkerdynamic_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:UsersarmyTikDesktopangular2
    ode_modulesangular2srccore
    enderapi.d.ts
        Error:(13, 13) TS2304: Cannot find name 'Map'.
        Error:(14, 84) TS2304: Cannot find name 'Map'.
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2srcfacadeasync.d.ts
        Error:(27, 33) TS2304: Cannot find name 'Promise'.
        Error:(28, 45) TS2304: Cannot find name 'Promise'.
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2srcfacadecollection.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:UsersarmyTikDesktopangular2
    ode_modulesangular2srcfacadelang.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:UsersarmyTikDesktopangular2
    ode_modulesangular2srcfacadepromise.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:UsersarmyTikDesktopangular2
    ode_modulesangular2srchttpheaders.d.ts
        Error:(43, 59) TS2304: Cannot find name 'Map'.
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2srchttpurl_search_params.d.ts
        Error:(11, 16) TS2304: Cannot find name 'Map'.
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2srcplatformrowserrowser_adapter.d.ts
        Error:(75, 33) TS2304: Cannot find name 'Map'.
        C:UsersarmyTikDesktopangular2
    ode_modulesangular2srcplatformdomdom_adapter.d.ts
        Error:(85, 42) TS2304: Cannot find name 'Map'.
        C:UsersarmyTikDesktopangular2
    ode_modules
    xjsCoreOperators.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:UsersarmyTikDesktopangular2
    ode_modules
    xjsObservable.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:UsersarmyTikDesktopangular2
    ode_modules
    xjsobservableForkJoinObservable.d.ts
        Error:(6, 50) TS2304: Cannot find name 'Promise'.
        Error:(7, 58) TS2304: Cannot find name 'Promise'.
        C:UsersarmyTikDesktopangular2
    ode_modules
    xjsobservableFromObservable.d.ts
        Error:(7, 38) TS2304: Cannot find name 'Promise'.
        Error:(7, 51) TS2304: Cannot find name 'Iterator'.
        C:UsersarmyTikDesktopangular2
    ode_modules
    xjsobservablePromiseObservable.d.ts
        Error:(9, 31) TS2304: Cannot find name 'Promise'.
        Error:(10, 26) TS2304: Cannot find name 'Promise'.
    

    解决方案

    Angular 5 with Typescript ^2.0.0

    This should also work the same with earlier versions of Angular 2+.

    To get this to work with typescript 2.0.0, I did the following.

    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"
        ]
      }
    

    More about @types with 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

    Install Example:

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

    Duplicate Identifier errors

    This is most likely because duplicate ecmascript 6 typings are already being imported from somewhere else most likely an old es6-shim.

    Double check typings.d.ts make sure there are no references to es6. Remove any reference to es6 from your typings directory if you have one.

    For Example:

    This will conflict with types:['core-js'] in typings.json.

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

    Including core-js in the types array in tsconfig.json should be the only place it is imported from.

    Angular CLI 1.0.0-beta.30

    If you are using the Angular-CLI, remove the lib array in typings.json. This seems to conflict with declaring core-js in types.

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

    Webstorm/Intellij Users using the Angular CLI

    Make sure the built in typescript compiler is disabled. This will conflict with the CLI. To compile your typescript with the CLI you can setup a ng serve configuration.

    Tsconfig compilerOptions lib vs types

    If you prefer not to install core js type definitions there are some es6 libraries that come included with typescript. Those are used via the lib: [] property in tsconfig.

    See here for example: https://www.typescriptlang.org/docs/handbook/compiler-options.html

    Note: If --lib is not specified a default library is injected. The default library injected is: ► For --target ES5: DOM,ES5,ScriptHost ► For --target ES6: DOM,ES6,DOM.Iterable,ScriptHost

    tl;dr

    Short answer either "lib": [ "es6", "dom" ] or "types": ["core-js"] can be used to resolve can't find Promise,Map, Set and Iterator. Using both however will cause duplicate identifier errors.

    这篇关于Angular:找不到 Promise、Map、Set 和 Iterator的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆