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