ts Una funzione o un metodo asincrono in ES5 / ES3 richiede il costruttore "Promise"


99

Ciao sto usando async / attendo nel mio progetto TypeScript, ma ottengo questo registro:

[ts] Una funzione o un metodo asincrono in ES5 / ES3 richiede il costruttore "Promise". Assicurati di avere una dichiarazione per il costruttore "Promise" o includi "ES2015" nella tua --libopzione.

Come posso risolverlo?

Risposte:


147

Come dice il messaggio di errore, aggiungi lib: es2015al tuo tsconfig.json

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

AGGIORNAMENTO: se questo non funziona per te, prova questo:

JetBrains IDE come WebStorm, utilizza la propria implementazione per impostazione predefinita. Assicurati di configurarlo per utilizzare invece il servizio in linguaggio TypeScript.

Per Visual Studio, i file di progetto e tsconfig.jsonsi escludono a vicenda. Dovrai configurare direttamente il tuo progetto.

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


{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }questo è il mio tsconfig.json Come dovrei modificare?
Sedric Heidarizarei

Dove specificarlo in Visual Studio 2017? Non ha tsconfig.json
Akash Kava

1
@katopz l'ho fatto, ma a VS non interessa, ho scoperto che il csprojfile ha alcuni elementi xml extra per abilitare / disabilitare queste cose.
Akash Kava

3
Ho dovuto riavviare il mio IDE (WebStorm) per vedere il risultato.
Coli

1
Ho dovuto includere "dom"nella "lib"matrice come bene o ricevo altri errori.
electrovir

22

Prova questo pacchetto che contiene le definizioni dei tipi per es6-promise

npm install --save @types/es6-promise


2
"unional" non è sbagliato, ma la tua risposta è stata quella che ha risolto il problema che stavo avendo. Grazie!
tuliomarchetto

12

Se sei su VS, elimina il tsconfig.json e fai clic con il pulsante destro del mouse sul progetto in Esplora soluzioni, quindi fai clic su Proprietà-> TypeScript Build in Generale modifica quanto segue

  • Versione ECMAScript: ECMAScript 6

  • Sistema del modulo: ES2015


@LukePighetti project in solution-explorer
Ivandro IG Jao


0

VS2019 non sembra riconoscere il file tsconfig.json, quindi le opzioni LIB non cambieranno l'applicazione. Questo è un modo per aggiungere la PROMESSA affinché il dattiloscritto accetti 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;

}

0

Per me l'errore si è verificato nei miei file di test all'interno della src/testscartella. Dato che uso ts-nodeper testare .tsdirettamente i file, ho escluso src/tests/*nel mio tsconfig.json. Non appena ho cancellato la riga l'errore è sparito (il che ha senso alla fine).

Nel caso qualcun altro stia lottando con questo nei suoi file di test.

EDIT: Ovviamente è necessario configurare --libcorrettamente l'opzione come indicato nella risposta accettata. La mia tsconfig.json --libopzione funziona come segue:

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

0

Finalmente sono riuscito a risolverlo!
Il mio comando sul terminale: Il yarn tsc main.ts && nodejs main.js mio messaggio di errore:

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.

Quello che ho fatto per risolverlo è stato fare riferimento al file tsconfig.json.
Il mio file tsconfig.json era così:

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

E il mio comando da terminale è così: yarn tsc -p ./tsconfig.json && nodejs main.js se voglio eseguire un altro file .ts lo faccio semplicemente: yarn tsc -p ./tsconfig.json && nodejs file_name.js


-4

Sto usando VS2017 v15.8.2 e Typescript 2.4.2 in un progetto Angular 4 (sotto un progetto di libreria di classi nella mia soluzione, non un progetto di dattiloscritto). Sono stato in grado di rimuovere l'errore / avviso in VS disabilitando il servizio di linguaggio JavaScript :

Opzioni => Editor di testo => JavaScript / TypeScript => Servizio linguistico

Riavvia VS.

Spero che questo ti aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.