[angular] 각도 : Promise, Map, Set 및 Iterator를 찾을 수 없습니다.



Answers

나는 또한 Promise 객체를 생성하고자 할 때 "Promise not found"라는 동일한 문제를 가지고있다.

System.config ({...})를 꺼내서 system.js를 만들고 index.html에 포함 시키려면 stackoverflow에서 찾은 일부 솔루션을 사용해보십시오.

마지막으로 나는이 문제를 해결했다. 문제는 index.html에서 es6-shim.min.js가 포함되어 있다는 것입니다. 그러나 tsconfig.json에서 "compilerOptions"아래의 "target"속성 값은 "es5"입니다. "es6"으로 변경 한 후 오류가 사라졌습니다.

Question

Angular를 설치 한 후 Typescript 컴파일러는 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'.






내 파일 구조는 다음과 같습니다.

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

app.ts 상단에 아래를 붙여 넣으면 문제가 해결됩니다.

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



angular-2.0.0-rc.4에서 업데이트 됨

TLDR;

  1. es6로 전송

    • 오류가 사라집니다 (w / some gotchas).
  2. es5로 전송

    • 타이핑을 설치하다
    • es6 shim을 설치하십시오.
    • 코드로 컴파일되었는지 확인하십시오.
    • 오류가 사라집니다.

독자들에게 :

옵션 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

이 경로를 간다면 typescript 컴파일러가 .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" />



각도 2가 RC 0에 이르기까지, /angular2/typings/browser.d.ts는 더 이상 각도 2 분포의 일부가 아닙니다. 이 파일은 별도로 설치할 수 있습니다.

여기에서 : https://github.com/angular/angular/issues/8513 몇 가지 옵션이 있습니다. 나를 위해 일한 것은 :

typings install es6-shim --ambient --save

// In your app.ts
/// <reference path="typings/browser.d.ts" />



boot.ts의 참조가 올바른 경로가 아니라는 사실을 발견했습니다. 이 경로를 /// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" /> 하면 Promise 오류가 해결되었습니다.




또 다른 가능한 해결책은 입력을 다시 설치하는 것입니다.
이 작품은 나를 위해 "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



TS 부트 스트랩 파일에 트리플 슬래시 참조를 추가하지 share 문제를 해결할 수 share 으로 share VS2015의 NodeJS 및 / 또는 NPM 번들 빌드를 업데이트하거나 입력을 설치할 수 있습니다 ( typings 에서 말한 것처럼 여러 가지 문제가 발생합니다). 전 세계적으로

다음은 몇 단계로 수행 한 작업입니다.

  • 프로젝트의 package.json 파일에 typings 을 추가 typings .
  • 각 NPM 작업 후에 입력을 실행 / 업데이트하기 위해 package.json 파일에 script 블록을 추가했습니다.
  • 프로젝트의 루트 폴더에 core-js 대한 참조를 포함하는 typings.json 파일이 추가되었습니다. core-js 는 현재 ES5 / ES6 문제를 해결할 수있는 최상의 shim / polyfill 패키지 중 하나입니다.

package.json 파일의 모양은 다음과 같습니다 (관련 행만).

{
  "version": "1.0.0",
  "name": "YourProject",
  "private": true,
  "dependencies": {
    ...
    "typings": "^1.3.2",
    ...
  },
  "devDependencies": {
    ...
  },
  "scripts": {
      "postinstall": "typings install"
  }
}

그리고 여기에 typings.json 있습니다 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 기본 설정을 엉망으로 만들지 않고도 해결할 수있는 가장 깨끗한 방법이라고 생각합니다.

이 문제에 대한 자세한 정보와 자세한 분석을 보려면 이 게시물읽는 것이 좋습니다.




Links