ts Uma função ou método assíncrono em ES5 / ES3 requer o construtor 'Promise'

99

Olá, estou usando async / await no meu projeto TypeScript, mas recebo este log:

[ts] Uma função ou método assíncrono em ES5 / ES3 requer o construtor 'Promise'. Certifique-se de ter uma declaração para o construtor 'Promessa' ou inclua 'ES2015' em sua --libopção.

Como posso resolver isso?

Sedric Heidarizarei
fonte

Respostas:

146

Como diz a mensagem de erro, adicione lib: es2015ao seu tsconfig.json

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

ATUALIZAÇÃO: se isso não funcionar para você, tente o seguinte:

JetBrains IDE, como WebStorm, usa sua própria implementação por padrão. Certifique-se de configurá-lo para usar o serviço de linguagem TypeScript.

Para Visual Studio, os arquivos de projeto e tsconfig.jsonsão mutuamente exclusivos. Você precisará configurar seu projeto diretamente.

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

unional
fonte
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }este é meu tsconfig.json. Como devo editar?
Sedric Heidarizarei
Onde especificar isso no Visual Studio 2017? Não tem tsconfig.json
Akash Kava
1
@katopz Eu fiz, mas o VS não se preocupa com isso, descobri que o csprojarquivo tem alguns elementos xml extras para habilitar / desabilitar tais coisas.
Akash Kava de
3
Tive que reiniciar meu IDE (WebStorm) para ver o resultado.
Coli
1
Tive que incluir "dom"no "lib"array também ou recebo outros erros.
electrovir
22

Experimente este pacote que contém definições de tipo para es6-promessa

npm install --save @types/es6-promise

Jeff Hernandez
fonte
2
'unional' não está errado, mas sua resposta foi aquela que resolveu o problema que eu estava tendo. Obrigado!
tuliomarchetto
12

Se você estiver no VS, exclua o tsconfig.json e clique com o botão direito do mouse no projeto no Solution Explorer e, em seguida, clique em Propriedades-> TypeScript Build em Geral, altere o seguinte

  • Versão ECMAScript: ECMAScript 6

  • Sistema de Módulo: ES2015

Ivandro IG Jao
fonte
Projeto @LukePighetti no solution-explorer
Ivandro IG Jao
3

Você também pode usar "lib": "es2015.promise" para esse erro específico

Rannie Aguilar Peralta
fonte
0

O VS2019 não parece reconhecer o arquivo tsconfig.json, portanto, as opções LIB não alterarão o aplicativo. Esta é uma forma de adicionar a PROMESSA para texto digitado para aceitar ASYNC AWAIT.

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;

}
sef
fonte
0

Para mim, o erro ocorreu em meus arquivos de teste dentro da src/testspasta. Como uso ts-nodepara testar os .tsarquivos diretamente, excluí src/tests/*no meu tsconfig.json. Assim que apaguei a linha, o erro desapareceu (o que faz sentido no final).

Apenas no caso de outra pessoa estar lutando com isso em seus arquivos de teste.

EDIT: Claro que você precisa configurar sua --libopção corretamente conforme descrito na resposta aceita. Minha tsconfig.json --libopção funciona da seguinte maneira:

"lib": [
    "es2018",
    "dom"
]
bene-nós
fonte
0

Finalmente consegui resolver!
Meu comando no terminal: yarn tsc main.ts && nodejs main.js Minha mensagem de erro:

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.

O que fiz para resolver foi fazer referência ao arquivo tsconfig.json.
Meu arquivo tsconfig.json era assim:

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

E meu comando de terminal é assim: yarn tsc -p ./tsconfig.json && nodejs main.js Se eu quiser executar outro arquivo .ts, eu simplesmente faço: yarn tsc -p ./tsconfig.json && nodejs file_name.js

Dr4kk0nnys
fonte
-4

Estou usando VS2017 v15.8.2 e Typescript 2.4.2 em um projeto Angular 4 (em um projeto de biblioteca de classe em minha solução, não um projeto de texto digitado). Consegui remover o erro / aviso no VS desativando o serviço de linguagem JavaScript :

Opções => Editor de Texto => JavaScript / TypeScript => Serviço de Linguagem

Reinicie o VS.

Espero que isto ajude.

Valone
fonte