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 в обозревателе решений
Ивандро Джао
3

Вы также можете использовать "lib": "es2015.promise" для этой конкретной ошибки.

Ранни Агилар Перальта
источник
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;

}
sef
источник
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

Dr4kk0nnys
источник
-4

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

Параметры => Текстовый редактор => JavaScript / TypeScript => Языковая служба

Перезагрузите VS.

Надеюсь это поможет.

Валоне
источник