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 --lib
opcję „ES2015” .
Jak mogę to rozwiązać?
źródło
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }
to jest mój plik tsconfig.json Jak mam edytować?csproj
plik ma dodatkowe elementy xml do włączania / wyłączania takich rzeczy."dom"
w"lib"
tablicy lub otrzymuję inne błędy.Wypróbuj ten pakiet, który zawiera definicje typów dla obietnicy es6
npm install --save @types/es6-promise
źródło
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
źródło
Możesz również użyć „lib”: „es2015.promise” dla tego konkretnego błędu
źródło
U mnie wystąpił błąd w moich plikach testowych w
src/tests
folderze. Ponieważ używamts-node
do.ts
bezpośredniego testowania plików, wykluczyłemsrc/tests/*
w moimtsconfig.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
--lib
poprawnie skonfigurować swoją opcję, zgodnie z zaakceptowaną odpowiedzią. Mojatsconfig.json --lib
opcja działa w następujący sposób:"lib": [ "es2018", "dom" ]
źródło
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; }
źródło
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
źródło
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.
źródło