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


99

Здравствуйте, я использую async / await в своем проекте TypeScript, но получаю этот журнал:

[ts] Асинхронная функция или метод в ES5 / ES3 требует конструктора Promise. Убедитесь, что у вас есть объявление для конструктора Promise или включите ES2015 в свой --libвариант.

Как я могу это решить?

Ответы:


149

Как говорится в сообщении об ошибке, добавьте 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 Как мне отредактировать?
Седрик Хейдаризарей

Где это указать в Visual Studio 2017? У него нет tsconfig.json
Акаш Кава

1
@katopz Я сделал, но VS не заботится об этом, я обнаружил, что в csprojфайле есть некоторые дополнительные элементы xml для включения / отключения таких вещей.
Акаш Кава

3
Мне пришлось перезапустить мою IDE (WebStorm), чтобы увидеть результат.
Coli

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

22

Попробуйте этот пакет, который содержит определения типов для es6-обещания

npm install --save @types/es6-promise


2
«униональный» не является неправильным, но ваш ответ был именно тем, что было у меня. Спасибо!
tuliomarchetto

12

Если вы используете VS, удалите tsconfig.json и щелкните правой кнопкой мыши проект в обозревателе решений, затем нажмите « Свойства» -> «Сборка TypeScript в общем», измените следующие параметры.

  • Версия ECMAScript: ECMAScript 6

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


Проект @LukePighetti в обозревателе решений
Ивандро Джао


0

VS2019, похоже, не распознает файл tsconfig.json, поэтому параметры LIB не изменят приложение. Это способ добавить ОБЕЩАНИЕ для машинописного текста на принятие 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.