ts Una función o método asíncrono en ES5 / ES3 requiere el constructor 'Promise'

99

Hola, estoy usando async / await en mi proyecto de TypeScript, pero obtengo este registro:

[ts] Una función o método asíncrono en ES5 / ES3 requiere el constructor 'Promise'. Asegúrese de tener una declaración para el constructor 'Promise' o incluya 'ES2015' en su --libopción.

¿Cómo puedo solucionar eso?

Sedric Heidarizarei
fuente

Respuestas:

146

Como dice el mensaje de error, agregue lib: es2015a su tsconfig.json

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

ACTUALIZAR: si esto no funciona para usted, intente esto:

JetBrains IDE, como WebStorm, utiliza su propia implementación de forma predeterminada. Asegúrese de configurarlo para usar el servicio de lenguaje TypeScript en su lugar.

Para Visual Studio, los archivos del proyecto y tsconfig.jsonson mutuamente excluyentes. Deberá configurar su proyecto directamente.

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

unional
fuente
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }este es mi tsconfig.json ¿Cómo debo editar?
Sedric Heidarizarei
¿Dónde especificar esto en Visual Studio 2017? No tiene tsconfig.json
Akash Kava
1
@katopz Lo hice, pero a VS no le importa, encontré que el csprojarchivo tiene algunos elementos xml adicionales para habilitar / deshabilitar tales cosas.
Akash Kava
3
Tuve que reiniciar mi IDE (WebStorm) para ver el resultado.
Coli
1
También tuve que incluirlo "dom"en la "lib"matriz o recibo otros errores.
electrovir
22

Pruebe este paquete que contiene definiciones de tipo para es6-promise

npm install --save @types/es6-promise

Jeff Hernandez
fuente
2
'unional' no está mal, pero su respuesta fue la que solucionó el problema que estaba teniendo. ¡Gracias!
tuliomarchetto
11

Si está en VS, elimine tsconfig.json y haga clic con el botón derecho en el proyecto en el Explorador de soluciones, luego haga clic en Propiedades-> Compilación de TypeScript en General, cambie lo siguiente

  • Versión de ECMAScript: ECMAScript 6

  • Sistema de módulos: ES2015

Ivandro IG Jao
fuente
Proyecto @LukePighetti en solution-explorer
Ivandro IG Jao
3

También puede utilizar "lib": "es2015.promise" para ese error específico

Rannie Aguilar Peralta
fuente
0

VS2019 no parece reconocer el archivo tsconfig.json, por lo que las opciones LIB no cambiarán la aplicación. Esta es una forma de agregar PROMISE para que el mecanografiado acepte 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
fuente
0

Para mí, el error se produjo en mis archivos de prueba dentro de la src/testscarpeta. Como utilizo ts-nodepara probar los .tsarchivos directamente, los excluí src/tests/*en mi tsconfig.json. Tan pronto como eliminé la línea, el error desapareció (lo que al final tiene sentido).

En caso de que alguien más tenga problemas con esto en sus archivos de prueba.

EDITAR: Por supuesto, debe configurar su --libopción correctamente como se describe en la respuesta aceptada. Mi tsconfig.json --libopción funciona de la siguiente manera:

"lib": [
    "es2018",
    "dom"
]
bene-nosotros
fuente
0

¡Finalmente logré resolverlo!
Mi comando en el terminal: yarn tsc main.ts && nodejs main.js Mi mensaje de error:

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.

Lo que hice para resolverlo fue hacer referencia al archivo tsconfig.json.
Mi archivo tsconfig.json era así:

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

Y mi comando de terminal es así: yarn tsc -p ./tsconfig.json && nodejs main.js si quiero ejecutar otro archivo .ts, simplemente hago: yarn tsc -p ./tsconfig.json && nodejs file_name.js

Dr4kk0nnys
fuente
-4

Estoy usando VS2017 v15.8.2 y Typescript 2.4.2 en un proyecto de Angular 4 (bajo un proyecto de biblioteca de clases en mi solución, no un proyecto de mecanografiado). Pude eliminar el error / advertencia en VS desactivando el servicio de lenguaje JavaScript :

Opciones => Editor de texto => JavaScript / TypeScript => Servicio de lenguaje

Reiniciar VS.

Espero que esto ayude.

Valone
fuente