저는 Typescript의 완전한 초보자이며 Typescript에서 ES6 promise를 사용할 수 있는지, 그리고 그것들이 작동하도록하려면 무엇을해야하는지 궁금합니다. 노드 0.11.14를 실행 중이며 컴파일 중에 ” ‘Promise’이름을 찾을 수 없습니다.”라는 오류가 발생합니다.
답변
현재 lib.d.ts에는 약속이 정의되어 있지 않으므로 추가 정의 파일이 필요하므로 컴파일 오류가 발생합니다.
예를 들어 @elclanrs가 말한 것과 같이 DefinitelyTyped의 정의 파일과 함께 es6-promise 패키지를 사용할 수 있습니다 .es6-promise definition
그런 다음 다음과 같이 사용할 수 있습니다.
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
편집 ES6 (TypeScript 컴파일러 사용)를 대상으로 할 때 정의없이 사용할 수 있습니다. tsconfig.json
:
"compilerOptions": {
"target": "ES6"
}
편집 2
TypeScript 2.0이 나오면 약간 변경되지만 (위는 여전히 작동하지만) 정의 파일은 아래와 같이 npm으로 직접 설치할 수 있습니다.
npm install --save @types/es6-promise
– 소스
edit3
유형 사용에 대한 자세한 정보로 답변 업데이트.
내용 package.json
으로 만 파일을 생성합니다 { }
(package.json이 아직없는 경우 호출 npm install --save @types/es6-promise
및 tsc --init
. 첫 번째 npm install 명령은 package.json
es6-promise를 종속성으로 포함하도록 변경합니다 . tsc –init는 tsconfig.json
파일 을 생성 합니다. 당신을 위해.
이제 typescript 파일에서 promise를 사용할 수 있습니다 var x: Promise<any>;
. tsc -p .
프로젝트를 컴파일하기 위해 실행 하십시오. 오류가 없어야합니다.
답변
대안 # 1
사용 target
및 lib
직접 컴파일 컴파일러 옵션을 es5
를 설치 할 필요없이 es6-shim
. (TypeScript로 테스트 됨 2.1.4
). lib 섹션에서 es2016
또는 es2015.promise
.
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"lib": [
"es2015.promise",
"dom"
]
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
대안 # 2
NPM을 사용es6-shim
하여 유형 조직 에서 설치 합니다 .
npm install @types/es6-shim --save-dev
대안 # 3
TypeScript 2.0 이전에는 타이핑 을 사용하여 DefinitelyTyped 에서 es6-shim
전역으로 설치합니다 .
npm install typings --global --save-dev
typings install dt~es6-shim --global --save-dev
typings
옵션을 사용하여 npm
설치 typings
전 세계적으로 다음 사용 typings
심의를 설치합니다. dt~
접두사는 DefinitelyTyped에서 심의를 다운로드하는 것을 의미합니다. 이 --global
옵션은 프로젝트 전체에서 shim의 유형을 사용할 수 있음을 의미합니다.
또한보십시오
https://github.com/Microsoft/TypeScript/issues/7788- ‘Promise’이름을 찾을 수 없으며 ‘require’이름을 찾을 수 없습니다.
답변
TypeScript 2.0부터는 다음을 포함하여 네이티브 약속에 대한 타이핑을 포함 할 수 있습니다. tsconfig.json
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
여기에는 대상을 ES6으로 설정하지 않고도 TypeScript와 함께 제공되는 promise 선언이 포함됩니다.
답변
node.js 0.12 이상 / typescript 1.4 이상을 사용하는 경우 다음과 같은 컴파일러 옵션을 추가하십시오.
tsc a.ts --target es6 --module commonjs
추가 정보 : https://github.com/Microsoft/TypeScript/wiki/Compiler-Options
을 사용하는 tsconfig.json
경우 다음과 같이하십시오.
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
}
}
추가 정보 : https://github.com/Microsoft/TypeScript/wiki/tsconfig.json
답변
이것은 가장 최근의 방법이며 위의 답변은 구식입니다.
typings install --global es6-promise
답변
Visual Studio 2015 + Node.js 도구 1.2에서 Typescript와 함께 네이티브 ES6 약속 사용
ES6 Promises가 기본이므로 npm 설치가 필요하지 않습니다.
Node.js 프로젝트 -> 속성-> Typescript 빌드 탭 ECMAScript 버전 = ECMAScript6
import http = require('http');
import fs = require('fs');
function findFolderAsync(directory : string): Promise<string> {
let p = new Promise<string>(function (resolve, reject) {
fs.stat(directory, function (err, stats) {
//Check if error defined and the error code is "not exists"
if (err && err.code === "ENOENT") {
reject("Directory does not exist");
}
else {
resolve("Directory exists");
}
});
});
return p;
}
findFolderAsync("myFolder").then(
function (msg : string) {
console.log("Promise resolved as " + msg);
},
function (msg : string) {
console.log("Promise rejected as " + msg);
}
);
답변
A. "target": "es5"
2.0 이하의 TypeScript 버전을 사용하는 경우 :
typings install es6-promise --save --global --source dt
B. "target": "es5"
TypeScript 버전 2.0 이상을 사용하는 경우 :
"compilerOptions": {
"lib": ["es5", "es2015.promise"]
}
C.를 사용하는 경우 "target": "es6"
아무것도 할 필요가 없습니다.