[javascript] 각도 : 약속,지도, 집합 및 반복자를 찾을 수 없습니다

각도를 설치 한 후, 타이프 스크립트 컴파일러 킵은 발견하지에 대한 몇 가지 오류를 받고 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

오류 :

................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'.



답변

타입 스크립트가있는 각도 5 ^ 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"
    ]
  }

typescript 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에 대한 참조가 없는지 다시 확인하십시오 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가져 오는 유일한 장소 여야합니다.

앵귤러 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 대 유형

핵심 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 not found”)가 있습니다.

System.js (System.js)를 작성하여 index.html에 포함시키는 System.config ({…})를 포함하여 stackoverflow에서 찾은 솔루션을 시도했습니다.

마침내 나는 문제를 해결했다. 문제는 index.html에 es6-shim.min.js가 포함되어 있다는 것입니다. 그러나 tsconfig.json에서 “compilerOptions”아래의 “target”특성 값은 “es5″입니다. “es6″으로 변경하면 오류가 사라집니다.


답변

앵귤러 2 파이널

-es5 지원 (TS 2.0.0 이상에서 완벽하게 작동)

갱신 당 es6-shim이 모두 typings가 함께 설치되어있는 경우, 현재 지원되지 않습니다 es6-shimcore-js함께. es6-shimtsconfig.json에서 언급하여 입력을 제거하십시오 . 내부 지원 core-jses5위해 아래 입력을 참조 할 수 있습니다.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"
  ]
}

마음에 계속 순간에 ES6 지원하지 않습니다 uglifyjs . 이는 프로덕션 번들 작성에 영향을 줄 수 있습니다.

옵션 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이 입력 폴더와 동일한 레벨인지 확인하십시오.

비. angular2 애플리케이션이 부트 스트랩되는 main.ts 파일에 참조를 포함하십시오.

옵션 A : tsconfig.json이 입력 폴더와 동일한 레벨인지 확인하십시오.

참고 : 타이핑 폴더를 제외시키기 위해 제외 플래그를 사용하지 마십시오.

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를 실행

typings install

그런 다음 서버를 다시 시작하십시오.


답변

Promise.resolve () 메서드를 인식하지 못하는 비슷한 문제가있었습니다 . 나는 변경 “대상” 에 ES5에서 값을 ES6tsconfig.json . 문제가 해결되었습니다.

도움이 되었기를 바랍니다.