[javascript] 네이티브 ES6 약속과 함께 Typescript를 사용하는 방법

저는 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-promisetsc --init. 첫 번째 npm install 명령은 package.jsones6-promise를 종속성으로 포함하도록 변경합니다 . tsc –init는 tsconfig.json파일 을 생성 합니다. 당신을 위해.

이제 typescript 파일에서 promise를 사용할 수 있습니다 var x: Promise<any>;. tsc -p .프로젝트를 컴파일하기 위해 실행 하십시오. 오류가 없어야합니다.


답변

대안 # 1

사용 targetlib직접 컴파일 컴파일러 옵션을 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"아무것도 할 필요가 없습니다.