ts ฟังก์ชันหรือเมธอด async ใน ES5 / ES3 ต้องการตัวสร้าง "Promise"


110

สวัสดีฉันใช้ async / await ในโครงการ TypeScript ของฉัน แต่ฉันได้รับบันทึกนี้:

[ts] ฟังก์ชันหรือวิธีการ async ใน ES5 / ES3 ต้องการตัวสร้าง "Promise" ตรวจสอบให้แน่ใจว่าคุณมีการประกาศสำหรับตัวสร้าง "Promise" หรือรวม "ES2015" ไว้ใน--libตัวเลือกของคุณ

ฉันจะแก้ปัญหานั้นได้อย่างไร

คำตอบ:


162

ตามที่ระบุข้อความแสดงข้อผิดพลาดให้เพิ่มlib: es2015tsconfig.json

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

UPDATE: หากวิธีนี้ไม่ได้ผลสำหรับคุณให้ลองทำดังนี้:

JetBrains IDE เช่น 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
Akash Kava

1
@katopz ฉันทำ แต่ VS ไม่สนใจฉันพบว่าcsprojไฟล์มีองค์ประกอบ xml พิเศษเพื่อเปิด / ปิดสิ่งเหล่านี้
Akash Kava

3
ฉันต้องรีสตาร์ท IDE (WebStorm) เพื่อดูผลลัพธ์
Coli

2
ฉันต้องรวม"dom"ไว้ใน"lib"อาร์เรย์ด้วยหรือฉันได้รับข้อผิดพลาดอื่น ๆ
electrovir


13

หากคุณใช้ VS ให้ลบ tsconfig.json แล้วคลิกขวาที่โปรเจ็กต์ใน Solution Explorer จากนั้นคลิกที่Properties-> TypeScript Build ใน Generalเปลี่ยนสิ่งต่อไปนี้

  • เวอร์ชัน ECMAScript: ECMAScript 6

  • ระบบโมดูล: ES2015


@LukePighetti โครงการใน solution-explorer
Ivandro Jao


2

สำหรับฉันข้อผิดพลาดเกิดขึ้นในไฟล์ทดสอบของฉันภายในsrc/testsโฟลเดอร์ เนื่องจากฉันใช้ts-nodeสำหรับการทดสอบ.tsไฟล์โดยตรงฉันจึงยกเว้นsrc/tests/*ในไฟล์tsconfig.jsonไฟล์. ทันทีที่ฉันลบบรรทัดข้อผิดพลาดก็หายไป (ซึ่งก็สมเหตุสมผลในตอนท้าย)

ในกรณีที่มีคนอื่นกำลังดิ้นรนกับสิ่งนี้ในไฟล์ทดสอบของเขา

แก้ไข: แน่นอนคุณต้องกำหนดค่า--libตัวเลือกของคุณให้ถูกต้องตามที่ระบุไว้ในคำตอบที่ยอมรับ tsconfig.json --libตัวเลือกของฉันทำงานได้ดังต่อไปนี้:

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

0

VS2019 ไม่รู้จักไฟล์ tsconfig.json ดังนั้นตัวเลือก LIB จะไม่เปลี่ยนแอปพลิเคชัน นี่เป็นวิธีการเพิ่ม PROMISE สำหรับ typescript เพื่อยอมรับ 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

ในที่สุดฉันก็แก้ได้แล้ว!
คำสั่งของฉันบนเทอร์มินัล: 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 (ภายใต้โปรเจ็กต์ไลบรารีคลาสในโซลูชันของฉันไม่ใช่โปรเจ็กต์ typescript) ฉันสามารถลบข้อผิดพลาด / คำเตือนใน VS โดยปิดใช้งานบริการภาษา JavaScript :

ตัวเลือก => แก้ไขข้อความ => JavaScript / TypeScript => บริการภาษา

รีสตาร์ท VS.

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.