ts Fungsi atau metode asinkron di ES5 / ES3 memerlukan konstruktor 'Promise'

99

Halo Saya Menggunakan async / await di Proyek TypeScript saya, Tapi saya Dapatkan log ini:

[ts] Fungsi atau metode asinkron di ES5 / ES3 memerlukan konstruktor 'Promise'. Pastikan Anda memiliki deklarasi untuk konstruktor 'Janji' atau menyertakan 'ES2015' dalam --libopsi Anda .

Bagaimana Saya Bisa Mengatasinya?

Sedric Heidarizarei
sumber

Jawaban:

148

Seperti yang dikatakan pesan kesalahan, tambahkan lib: es2015ke tsconfig.json Anda

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

PEMBARUAN: jika ini tidak berhasil untuk Anda, coba ini:

JetBrains IDE seperti WebStorm, gunakan implementasinya sendiri secara default. Pastikan Anda mengkonfigurasinya untuk menggunakan layanan bahasa TypeScript.

Untuk Visual Studio, file proyek dan tsconfig.jsonsaling eksklusif. Anda perlu mengkonfigurasi proyek Anda secara langsung.

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

unional
sumber
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false } }ini tsconfig.json saya. Bagaimana saya harus mengedit?
Sedric Heidarizarei
Di mana menentukan ini di Visual Studio 2017? Itu tidak memiliki tsconfig.json
Akash Kava
1
@katopz saya lakukan, tetapi VS tidak peduli tentang itu, saya menemukan bahwa csprojfile tersebut memiliki beberapa elemen xml tambahan untuk mengaktifkan / menonaktifkan hal-hal seperti itu.
Akash Kava
3
Saya harus me-restart IDE (WebStorm) saya untuk melihat hasilnya.
Coli
1
Saya harus memasukkannya juga ke "dom"dalam "lib"array atau saya mendapatkan kesalahan lainnya.
electrovir
22

Coba paket ini yang berisi definisi tipe untuk es6-promise

npm install --save @types/es6-promise

Jeff Hernandez
sumber
2
'unional' tidak salah, tapi jawaban Anda adalah salah satu masalah yang saya alami. Terima kasih!
tuliomarchetto
12

Jika Anda menggunakan VS, hapus tsconfig.json dan klik kanan proyek di Solution Explorer, lalu klik Properties-> TypeScript Build in General ubah yang berikut ini

  • Versi ECMAScript: ECMAScript 6

  • Sistem Modul: ES2015

Ivandro Jao
sumber
Proyek @ LukePighetti di penjelajah solusi
Ivandro Jao
3

Anda juga dapat menggunakan "lib": "es2015.promise" untuk kesalahan khusus tersebut

Rannie Aguilar Peralta
sumber
0

VS2019 sepertinya tidak mengenali file tsconfig.json, jadi opsi LIB tidak akan mengubah aplikasi. Ini adalah cara untuk menambahkan PROMISE untuk skrip ketikan untuk menerima 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
sumber
0

Bagi saya kesalahan terjadi pada file pengujian saya di dalam src/testsfolder. Karena saya gunakan ts-nodeuntuk menguji .tsfile secara langsung, saya dikecualikan src/tests/*dalam filetsconfig.json . Segera setelah saya menghapus baris, kesalahan itu hilang (yang pada akhirnya masuk akal).

Untuk berjaga-jaga jika ada orang lain yang berjuang dengan ini di file pengujiannya.

EDIT: Tentu saja Anda perlu mengkonfigurasi --libopsi Anda dengan benar seperti yang diuraikan dalam jawaban yang diterima. tsconfig.json --libOpsi saya berfungsi sebagai berikut:

"lib": [
    "es2018",
    "dom"
]
manfaat-kita
sumber
0

Saya akhirnya berhasil menyelesaikannya!
Perintah saya di terminal: yarn tsc main.ts && nodejs main.js Pesan kesalahan saya:

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.

Apa yang saya lakukan untuk mengatasinya, merujuk pada file tsconfig.json.
File tsconfig.json saya seperti ini:

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

Dan perintah terminal saya adalah seperti ini: yarn tsc -p ./tsconfig.json && nodejs main.js Jika saya ingin menjalankan file .ts lainnya, saya cukup melakukan: yarn tsc -p ./tsconfig.json && nodejs file_name.js

Dr4kk0nnys
sumber
-4

Saya menggunakan VS2017 v15.8.2 dan Typecript 2.4.2 dalam proyek Angular 4 (di bawah proyek perpustakaan kelas dalam solusi saya, bukan proyek skrip ketikan). Saya dapat menghapus kesalahan / peringatan di VS dengan menonaktifkan layanan bahasa JavaScript :

Pilihan => Editor Teks => JavaScript / TypeScript => Layanan Bahasa

Mulai ulang VS.

Semoga ini membantu.

Valone
sumber