ts Une fonction ou une méthode asynchrone dans ES5 / ES3 nécessite le constructeur 'Promise'

99

Bonjour, j'utilise async / await dans mon projet TypeScript, mais j'obtiens ce journal:

[ts] Une fonction ou méthode asynchrone dans ES5 / ES3 nécessite le constructeur «Promise». Assurez-vous d'avoir une déclaration pour le constructeur «Promise» ou incluez «ES2015» dans votre --liboption.

Comment puis-je résoudre cela?

Sedric Heidarizarei
la source

Réponses:

147

Comme le message d'erreur l'indique, ajoutez lib: es2015à votre tsconfig.json

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

MISE À JOUR: si cela ne fonctionne pas pour vous, essayez ceci:

JetBrains IDE tel que WebStorm, utilise sa propre implémentation par défaut. Assurez-vous de le configurer pour utiliser le service de langage TypeScript à la place.

Pour Visual Studio, les fichiers de projet et tsconfig.jsonsont mutuellement exclusifs. Vous devrez configurer votre projet directement.

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

unional
la source
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }c'est mon tsconfig.json Comment dois-je modifier?
Sedric Heidarizarei
Où spécifier cela dans Visual Studio 2017? Il n'a pas tsconfig.json
Akash Kava
1
@katopz Je l'ai fait, mais VS ne s'en soucie pas, j'ai trouvé que ce csprojfichier contenait des éléments xml supplémentaires pour activer / désactiver de telles choses.
Akash Kava
3
J'ai dû redémarrer mon IDE (WebStorm) pour voir le résultat.
Coli
1
Je devais également inclure "dom"dans le "lib"tableau ou j'obtiens d'autres erreurs.
electrovir
22

Essayez ce package qui contient des définitions de type pour es6-promise

npm install --save @types/es6-promise

Jeff Hernandez
la source
2
«unional» n'est pas faux, mais votre réponse était celle qui a réglé le problème que j'avais. Merci!
tuliomarchetto du
12

Si vous êtes sur VS, supprimez le tsconfig.json et cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions, puis cliquez sur Propriétés-> TypeScript Build en général, modifiez les éléments suivants

  • Version ECMAScript: ECMAScript 6

  • Système de module: ES2015

Ivandro IG Jao
la source
Projet @LukePighetti dans solution-explorer
Ivandro IG Jao
3

Vous pouvez également utiliser le "lib": "es2015.promise" pour cette erreur spécifique

Rannie Aguilar Peralta
la source
0

VS2019 ne semble pas reconnaître le fichier tsconfig.json, les options LIB ne changeront donc pas l'application. C'est une façon d'ajouter la PROMESSE pour dactylographié d'accepter 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
la source
0

Pour moi, l'erreur s'est produite dans mes fichiers de test dans le src/testsdossier. Puisque j'utilise ts-nodepour tester les .tsfichiers directement, j'ai exclu src/tests/*dans mon tsconfig.json. Dès que j'ai supprimé la ligne, l'erreur a disparu (ce qui est logique à la fin).

Juste au cas où quelqu'un d'autre aurait du mal avec cela dans ses fichiers de test.

EDIT: Bien sûr, vous devez configurer --libcorrectement votre option comme indiqué dans la réponse acceptée. Mon tsconfig.json --liboption fonctionne comme suit:

"lib": [
    "es2018",
    "dom"
]
bene-nous
la source
0

J'ai enfin réussi à le résoudre!
Ma commande sur le terminal: yarn tsc main.ts && nodejs main.js Mon message d'erreur:

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.

Ce que j'ai fait pour le résoudre, c'était de référencer le fichier tsconfig.json.
Mon fichier tsconfig.json était comme ceci:

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

Et ma commande de terminal est comme ceci: yarn tsc -p ./tsconfig.json && nodejs main.js Si je veux exécuter un autre fichier .ts, je fais simplement: yarn tsc -p ./tsconfig.json && nodejs file_name.js

Dr4kk0nnys
la source
-4

J'utilise VS2017 v15.8.2 et Typescript 2.4.2 dans un projet Angular 4 (sous un projet de bibliothèque de classes dans ma solution, pas dans un projet dactylographié). J'ai pu supprimer l'erreur / l'avertissement dans VS en désactivant le service de langage JavaScript :

Options => Éditeur de texte => JavaScript / TypeScript => Service de langage

Redémarrez VS.

J'espère que cela t'aides.

Valone
la source