ts Для асинхронної функції або методу в ES5 / ES3 потрібен конструктор 'Promise'


99

Привіт, я використовую async / await у своєму проекті TypeScript, але я отримую цей журнал:

[ts] Для асинхронної функції або методу в ES5 / ES3 потрібен конструктор 'Promise'. Переконайтеся, що у вас є декларація для конструктора 'Promise', або включіть 'ES2015' у свій --libваріант.

Як я можу це вирішити?

Відповіді:


146

Як повідомляється в повідомленні про помилку, додайте lib: es2015у свій файл tsconfig.json

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

ОНОВЛЕННЯ: якщо це не працює у вас, спробуйте:

IDE JetBrains, наприклад WebStorm, використовує власну реалізацію за замовчуванням. Переконайтесь, що ви налаштували його на використання мовної служби TypeScript.

Для Visual Studio файли проекту tsconfig.jsonвзаємно виключаються. Вам потрібно буде налаштувати свій проект безпосередньо.

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


{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }це мій tsconfig.json Як мені редагувати?
Sedric Heidarizarei

Де це вказати у Visual Studio 2017? У ньому немає tsconfig.json
Kava

1
@katopz я це зробив, але VS не піклується про це, я виявив, що у csprojфайлі є кілька додаткових елементів xml для ввімкнення / вимкнення таких речей.
Akash Kava

3
Мені довелося перезапустити IDE (WebStorm), щоб побачити результат.
Coli

1
Мені також довелося включити "dom"в "lib"масив, або я отримую інші помилки.
електровір

22

Спробуйте цей пакет, який містить визначення типів для es6-promis

npm install --save @types/es6-promise


2
"unional" - це не неправильно, але ваша відповідь була такою, яка відсортувала проблему, яку я мав. Дякую!
tuliomarchetto

12

Якщо ви використовуєте VS, видаліть tsconfig.json і клацніть правою кнопкою миші проект у Провіднику рішень, а потім натисніть Властивості-> Створення TypeScript загалом, змініть наступне

  • Версія ECMAScript: ECMAScript 6

  • Модульна система: ES2015


@LukePighetti project in explo-explorer
Ivandro IG Jao


0

VS2019, здається, не розпізнає файл tsconfig.json, тому параметри LIB не змінять програму. Це спосіб додати PROMISE для машинопису, щоб прийняти 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

Для мене помилка сталася в моїх тестових файлах всередині src/testsпапки. Оскільки я використовую ts-nodeдля тестування .tsфайлів безпосередньо, я виключив src/tests/*у своєму tsconfig.json. Як тільки я видалив рядок, помилка зникла (що, зрештою, має сенс).

Про всяк випадок, коли хтось ще бореться з цим у своїх тестових файлах.

РЕДАГУВАТИ: Звичайно, вам потрібно правильно налаштувати свій --libваріант, як зазначено у прийнятій відповіді. Мій tsconfig.json --libваріант працює наступним чином:

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

0

Нарешті мені вдалося це вирішити!
Моя команда на терміналі: yarn tsc main.ts && nodejs main.js Моє повідомлення про помилку:

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.

Що я зробив для його вирішення, посилався на файл tsconfig.json.
Мій файл tsconfig.json був таким:

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

І моя команда терміналу така: yarn tsc -p ./tsconfig.json && nodejs main.js Якщо я хочу запустити інший файл .ts, я просто роблю: yarn tsc -p ./tsconfig.json && nodejs file_name.js


-4

Я використовую VS2017 v15.8.2 і Typescript 2.4.2 у проекті Angular 4 (у проекті бібліотеки класів у моєму рішенні, а не проекті машинопису). Я зміг видалити помилку / попередження у VS, вимкнувши мовну службу JavaScript :

Параметри => Текстовий редактор => JavaScript / TypeScript => Мовна служба

Перезапустіть VS.

Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.