ts Funkcja lub metoda asynchroniczna w ES5 / ES3 wymaga konstruktora „Promise”

107

Witam, używam async / await w moim projekcie TypeScript, ale otrzymuję ten dziennik:

[ts] Funkcja lub metoda asynchroniczna w ES5 / ES3 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise” lub włącz --libopcję „ES2015” .

Jak mogę to rozwiązać?

Sedric Heidarizarei
źródło

Odpowiedzi:

158

Zgodnie z komunikatem o błędzie dodaj lib: es2015do pliku tsconfig.json

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

AKTUALIZACJA: jeśli to nie działa, spróbuj tego:

JetBrains IDE, takie jak WebStorm, domyślnie używa własnej implementacji. Upewnij się, że skonfigurowałeś go do używania usługi języka TypeScript.

W przypadku programu Visual Studio pliki projektu i tsconfig.jsonwykluczają się wzajemnie. Będziesz musiał bezpośrednio skonfigurować swój projekt.

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

unional
źródło
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }to jest mój plik tsconfig.json Jak mam edytować?
Sedric Heidarizarei
Gdzie to określić w programie Visual Studio 2017? Nie ma tsconfig.json
Akash Kava
1
@katopz Zrobiłem, ale VS nie dba o to, stwierdziłem, że csprojplik ma dodatkowe elementy xml do włączania / wyłączania takich rzeczy.
Akash Kava
3
Musiałem ponownie uruchomić moje IDE (WebStorm), aby zobaczyć wynik.
Coli
2
Musiałem również uwzględnić "dom"w "lib"tablicy lub otrzymuję inne błędy.
electrovir
22

Wypróbuj ten pakiet, który zawiera definicje typów dla obietnicy es6

npm install --save @types/es6-promise

Jeff Hernandez
źródło
2
„unional” nie jest błędne, ale twoja odpowiedź była tą, która rozwiązała problem, który miałem. Dzięki!
tuliomarchetto
12

Jeśli korzystasz z VS, usuń plik tsconfig.json i kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań, a następnie kliknij Właściwości-> Kompilacja TypeScript w Ogólne zmień następujące

  • Wersja ECMAScript: ECMAScript 6

  • System modułu: ES2015

Ivandro Jao
źródło
Projekt @LukePighetti w eksploratorze rozwiązań
Ivandro Jao
3

Możesz również użyć „lib”: „es2015.promise” dla tego konkretnego błędu

Rannie Aguilar Peralta
źródło
1

U mnie wystąpił błąd w moich plikach testowych w src/testsfolderze. Ponieważ używam ts-nodedo .tsbezpośredniego testowania plików, wykluczyłem src/tests/*w moim tsconfig.json. Jak tylko usunąłem linię, błąd zniknął (co w końcu ma sens).

Na wypadek gdyby ktoś inny zmagał się z tym w swoich plikach testowych.

EDYCJA: Oczywiście musisz --libpoprawnie skonfigurować swoją opcję, zgodnie z zaakceptowaną odpowiedzią. Moja tsconfig.json --libopcja działa w następujący sposób:

"lib": [
    "es2018",
    "dom"
]
bene-my
źródło
0

Wygląda na to, że VS2019 nie rozpoznaje pliku tsconfig.json, więc opcje LIB nie zmienią aplikacji. Jest to sposób na dodanie OBIETNICY dla maszynopisu, aby zaakceptować 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
źródło
0

W końcu udało mi się to rozwiązać!
Moje polecenie na terminalu: yarn tsc main.ts && nodejs main.js Mój komunikat o błędzie:

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.

To, co zrobiłem, aby go rozwiązać, odwoływałem się do pliku tsconfig.json.
Mój plik tsconfig.json wyglądał następująco:

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

A moje polecenie terminala jest takie: yarn tsc -p ./tsconfig.json && nodejs main.js Jeśli chcę uruchomić inny plik .ts, po prostu robię: yarn tsc -p ./tsconfig.json && nodejs file_name.js

Dr4kk0nnys
źródło
-4

Używam VS2017 15.8.2 i Typescript 2.4.2 w projekcie Angular 4 (w projekcie biblioteki klas w moim rozwiązaniu, a nie w projekcie maszynopisu). Udało mi się usunąć błąd / ostrzeżenie w VS, wyłączając usługę języka JavaScript :

Opcje => Edytor tekstu => JavaScript / TypeScript => Usługa językowa

Uruchom ponownie VS.

Mam nadzieję że to pomoże.

Valone
źródło