각도 : 약속,지도, 집합 및 반복자를 찾을 수 없습니다
각도를 설치 한 후, 타이프 스크립트 컴파일러 킵은 발견하지에 대한 몇 가지 오류를 받고 Promise
, Map
, Set
와 Iterator
.
지금까지 나는 그것들을 무시했지만 지금 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에 대한 추가 정보.
- https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/
- 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에 포함시키는 솔루션을 포함하여 stackoverflow에서 찾은 솔루션을 시도했습니다.
마침내 나는 문제를 해결했다. 문제는 index.html에 es6-shim.min.js가 포함되어 있다는 것입니다. 그러나 tsconfig.json에서 "compilerOptions"아래의 "target"특성 값은 "es5"입니다. "es6"으로 변경하면 오류가 사라집니다.
앵귤러 2 파이널
-es5 지원 (TS 2.0.0 이상에서 완벽하게 작동)
갱신 당 es6-shim
이 모두 typings가 함께 설치되어있는 경우, 현재 지원되지 않습니다 es6-shim
및 core-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;
es6로 변환
- 오류가 사라집니다 (일부 문제가 있음).
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" />
이것이 나를 위해 일한 것입니다.
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
그런 다음 서버를 다시 시작하십시오.
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)
}
}
Promise.resolve () 메서드를 인식하지 못하는 비슷한 문제가있었습니다 . 나는 변경 "대상" 에 ES5에서 값을 ES6 에 tsconfig.json . 문제가 해결되었습니다.
도움이 되었기를 바랍니다.
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" />
타이핑 v1.0 +와 함께 Angular2 RC1을 사용하는 경우 다음 명령을 사용하십시오.
typings install dt~core-js --save --global
핵심 JS 정의를 설치 한 다음 main.ts에서 글로벌 색인을 참조하십시오.
/// <reference path="../../../typings/index.d.ts" />
es6-shim 또는 다른 shim 라이브러리를 사용하는 경우 대신 타이핑을 설치하십시오
https://github.com/typings/typings/issues/517 을 참조하십시오.
TS 부트 스트랩 파일에 트리플 슬래시 참조를 추가하거나 ES6로 변경하지 않고도이 문제를 해결할 수 있었습니다 (@DatBoi가 말한 것처럼 많은 문제가 발생합니다 ) VS2015 NodeJS
및 / 또는 NPM
번들 빌드를 업데이트 하거나 typings
전 세계적으로 설치하십시오 .
몇 단계로 수행 한 작업은 다음과 같습니다.
typings
프로젝트package.json
파일에 추가 되었습니다 .- 각 NPM 작업 후 실행 / 업데이트하기 위해 파일에
script
블록을 추가했습니다 .package.json
typings
- 에 대한
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
파일이 있습니다 :
{
"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 기본 설정을 엉망으로 만들지 않고 가능한 가장 깨끗한 방법이라고 생각합니다.
자세한 정보와 문제에 대한 자세한 분석을 보려면 내 블로그 에서이 게시물 을 읽어보십시오 .
Angular 5에서 Angular 6으로 업그레이드 한 후 이러한 문제가 나타나는 것을 알았습니다 .VS2017에서 다음을 수행 하여이 문제를 해결할 수 있습니다.
- 특정 버전의 TypeScript 2.9에 대해 VisualScript 설치 관리자를 통해 TypeScript SDK가 설치되어 있는지 확인하십시오.
- 모듈 시스템 프로젝트 특성이 내 tsconfig.json : ES2015의 특성과 일치하도록 설정되어 있는지 확인하십시오. tsconfig 파일이 프로젝트의 루트에있는 경우 종종 자동으로 동기화됩니다. 그러나 VS Angular 템플릿을 사용하고 있었기 때문에 이러한 파일을 "ClientApp"하위 폴더에 배치하고 모듈 시스템 프로젝트 속성이 설정되지 않았습니다.
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": "./"
}
}
수업 내에서 약속 객체를 만들 때도 같은 문제가있었습니다. 대상 이름을 "es6"에서 "es5"로 변경하면 문제가 해결되었습니다.
또 다른 가능한 해결책은 타이핑을 다시 설치
하는 것입니다."angular2": "2.0.0-beta.15"
npm clean cache
npm install
npm install -g typings
typings
프로젝트에서 디렉토리 삭제 (타이핑 모듈이 설치된 디렉토리)typings install
npm run
또 다른 좋은 해결책. 컨텐츠가있는 프로젝트의 루트 디렉토리에 typings.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로 변경할 필요가 없습니다. 웹 응용 프로그램은 이전 버전의 브라우저를 지원하지 않습니다.
Visual Studio 2017에서 이러한 오류가 표시되어 여기에 왔으면 컴파일에 성공하면 위와 다른 문제가 있습니다. 언어 서비스가 tsconfig.json을 선택하지 않기 때문입니다.
tsconfig.json의 Build Action을 "Content"(오른쪽 클릭-> Properties)로 설정하면 VS가 선택합니다.
boot.ts의 참조가 올바른 경로가 아니라는 것을 알았습니다. 해당 경로를 업데이트 /// <reference path=">../../../node_modules/angular2/typings/browser.d.ts" />
하여 약속 오류 를 해결했습니다.
angular2 tutorial (hero)로 훈련하고 있습니다.
이 답변에 주석 처리 된 @ 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에서 타이프의 버전을 변경 ^2.0.0
하는 2.0.0
,하지만 난 로컬 타이프 라이터 설치를 다운 그레이드 할 때까지 작동하지 않았다.
참고 URL : https://stackoverflow.com/questions/35660498/angular-cant-find-promise-map-set-and-iterator
'IT story' 카테고리의 다른 글
MySQL : GROUP_CONCAT 값 정렬 (0) | 2020.05.25 |
---|---|
키 값 쌍을 가진 array_push () (0) | 2020.05.25 |
파이썬에서 파일의 MIME 유형을 찾는 방법은 무엇입니까? (0) | 2020.05.25 |
동기 연결에 HttpClient를 사용하는 이유 (0) | 2020.05.25 |
Eclipse Java 디버깅 : 소스를 찾을 수 없음 (0) | 2020.05.25 |