ค้นหาเว็บไซต์

จะบอก TypeScript อย่างไรว่า จะมีการโยนข้อผิดพลาดถ้าพารามิเตอร์เป็น null?


สมมติว่าต่อไปนี้:

const handleParse = (arg: { value: boolean } | null) => {
    if (!arg?.value) {
        throw new Error(`\`arg\` is null`)
    }
    
    return arg.value;
}

ที่นี่ Typescript รู้แบบอินไลน์ว่า arg.value ที่ส่งกลับมานั้นจะถูกกำหนดค่าเสมอ

อย่างไรก็ตาม ฉันกำลังพยายามปรับโค้ดของข้อผิดพลาดที่ถูกโยนให้เป็นเมธอดช่วยเหลือ แต่กลับเกิดข้อผิดพลาด:

const checkDependency = (dependency: any) => {
    if (!dependency) {
        throw new Error(`\`dependency\` is null`)
    }
}

const handleParse = (arg: { value: boolean } | null) => {
    checkDependency(arg)
    
    return arg.value;
//         ^^^ 'arg' is possible null
}

ฉันจะทำสิ่งนี้ให้สำเร็จได้อย่างไร? ฉันได้ลองปรับเปลี่ยนประเภทการคืนค่าแล้ว แต่ก็ไม่สำเร็จ:

const checkDependency = (dependency: any):  Error | void  => {
    if (!dependency) {
        throw new Error(`\`arg\` is null`)
    }

    return;
}

คำตอบ #1

คุณสามารถใช้ฟังก์ชันการยืนยันชนิดข้อมูลสำหรับสิ่งนั้นร่วมกับพารามิเตอร์ชนิดข้อมูลที่เรารวมกับ null:

function checkDependency<T>(arg: T | null): asserts arg is T {
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^
    if (arg === null) {
        throw new Error(`\`arg\` is null`);
    }
}

นี่คือตัวอย่างของคุณที่ใช้สิ่งนั้น:

const handleParse = (arg: { value: boolean } | null) => {
    checkDependency(arg);
    
    return arg.value; // <== No error
};

ตัวอย่างเต็มบน Playground

ฟังก์ชันยืนยันประเภทถูกเพิ่มเข้ามาใน TypeScript เวอร์ชัน 3.7 มันคล้ายกับตัวยืนยันประเภท แต่ทำในสิ่งที่คุณอธิบายอย่างตรงไปตรงมา: ระบุว่าถ้าฟังก์ชันไม่เกิดข้อผิดพลาด ประเภทข้อมูลจะเป็นไปตามที่ฟังก์ชันยืนยัน

บทความที่เกี่ยวข้อง