ts ES5 / ES3의 비동기 함수 또는 메서드에는 'Promise'생성자가 필요합니다.


99

안녕하세요 저는 TypeScript 프로젝트에서 async / await를 사용하고 있지만 다음 로그를 얻습니다.

[ts] ES5 / ES3의 비동기 함수 또는 메서드에는 'Promise'생성자가 필요합니다. 'Promise'생성자에 대한 선언이 있는지 확인하거나 --lib옵션 에 'ES2015'를 포함하세요 .

어떻게 해결할 수 있습니까?

답변:


146

오류 메시지에서 알 수 있듯이 lib: es2015tsconfig.json에 추가 하십시오.

// tsconfig.json
{
  "compilerOptions": {
    "lib": [ "es2015" ]
  }
}

업데이트 : 이것이 작동하지 않으면 다음을 시도하십시오.

WebStorm과 같은 JetBrains IDE는 기본적으로 자체 구현을 사용합니다. 대신 TypeScript 언어 서비스를 사용하도록 구성했는지 확인하십시오.

Visual Studio의 경우 프로젝트 파일 tsconfig.json은 상호 배타적입니다. 프로젝트를 직접 구성해야합니다.

https://github.com/Microsoft/TypeScript/issues/3983#issuecomment-123861491


{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }이것은 내 tsconfig.json입니다. 어떻게 편집해야합니까?
Sedric Heidarizarei

Visual Studio 2017에서 이것을 지정하는 위치는 어디입니까? 그것은 tsconfig.json이 없습니다
아카 쉬 카바에게

1
@katopz 내가했지만 VS는 그것에 대해 신경 쓰지 않습니다. csproj파일에 그러한 것들을 활성화 / 비활성화하는 추가 xml 요소가 있음을 발견했습니다 .
Akash Kava

3
결과를보기 위해 IDE (WebStorm)를 다시 시작해야했습니다.
Coli

1
나는 포함했다 "dom"에서 "lib"뿐만 아니라 배열 또는 나는 다른 오류를 얻을.
electrovir

22

es6-promise에 대한 유형 정의가 포함 된이 패키지를 사용해보십시오.

npm install --save @types/es6-promise


2
'unional'은 틀린 것이 아니지만 당신의 대답은 제가 겪고있는 문제를 분류 한 것입니다. 감사!
tuliomarchetto

12

VS를 사용하는 경우 tsconfig.json을 삭제하고 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭 한 다음 일반 에서 속성-> TypeScript 빌드 를 클릭 하여 다음을 변경합니다.

  • ECMAScript 버전 : ECMAScript 6

  • 모듈 시스템 : ES2015


솔루션 탐색기에서 @LukePighetti 프로젝트
Ivandro IG Jao


0

VS2019는 tsconfig.json 파일을 인식하지 못하는 것 같으므로 LIB 옵션은 응용 프로그램을 변경하지 않습니다. 이것은 ASYNC AWAIT를 받아들이도록 typescript에 대한 PROMISE를 추가하는 방법입니다.

export function AD(first: any, second: any, callBack: any)
{
    const rtn = async (dispatch: any): Promise<void> =>
    {
        await axios.post(TYPE.URI, { // provide a string of a URI to post into
            parm1: first,
            parm2: second
        })
            .then(data => // or you can use response instead of data as a name
            {
                console.log("data from call next");
                console.log(data);
                dispatch({ type: TYPES.AD, payload: data.data });
                if (callBack)
                {
                    callBack(data);
                }
            })
    }
    return rtn;

}

0

나를 위해 src/tests폴더 내의 테스트 파일에서 오류가 발생했습니다 . 내가 사용하기 때문에 ts-node테스트를 위해 .ts직접 파일을, 나는 제외 src/tests/*내에서 tsconfig.json. 줄을 삭제하자마자 오류가 사라졌습니다 (결국 의미가 있음).

다른 누군가가 그의 테스트 파일에서 이것으로 어려움을 겪고있는 경우를 대비하여.

편집 : 물론 --lib수락 된 답변에 설명 된대로 옵션을 올바르게 구성해야합니다 . 내 tsconfig.json --lib옵션은 다음과 같이 작동합니다.

"lib": [
    "es2018",
    "dom"
]

0

드디어 해결했습니다!
터미널의 내 명령 : yarn tsc main.ts && nodejs main.js 내 오류 메시지 :

main.ts:1:16 - error TS2705: An async function or method in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.

1 async function main() {
                 ~~~~


Found 2 errors.

error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

내가 그것을 해결하기 위해 한 것은 tsconfig.json 파일을 참조하는 것입니다.
내 tsconfig.json 파일은 다음과 같습니다.

{
    "compilerOptions": {
        "target": "ESNext",
        "lib": [
            "ES2015",
            "DOM"
        ]
    }
}

그리고 내 터미널 명령은 다음과 같습니다. yarn tsc -p ./tsconfig.json && nodejs main.js 다른 .ts 파일을 실행하려면 다음을 수행하십시오. yarn tsc -p ./tsconfig.json && nodejs file_name.js


-4

Angular 4 프로젝트에서 VS2017 v15.8.2 및 Typescript 2.4.2를 사용하고 있습니다 (타입 스크립트 프로젝트가 아닌 내 솔루션의 클래스 라이브러리 프로젝트 아래). JavaScript 언어 서비스를 비활성화하여 VS에서 오류 / 경고를 제거 할 수있었습니다 .

옵션 => 텍스트 편집기 => JavaScript / TypeScript => 언어 서비스

VS를 다시 시작하십시오.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.