การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch
กำหนดชนิดข้อมูลพารามิเตอร์ catch เป็น unknown จากนั้นจำกัดชนิดข้อมูลด้วย instanceof/typeof หรือตัวตรวจแบบกำหนดเองเพื่อจัดการข้อผิดพลาดอย่างปลอดภัย
การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
บทนำ
เป้าหมาย: จับข้อผิดพลาดเป็น unknown และจำกัดชนิดอย่างปลอดภัย คุณจะใช้ instanceof typeof และ ตัวตรวจสอบชนิดแบบกำหนดเอง เพื่ออ่านข้อมูลข้อผิดพลาดโดยไม่เกิดผลที่คาดไม่ถึง
unknown และ instanceof
เริ่มต้นด้วย unknown จำกัดชนิดด้วย instanceof Error เพื่อเข้าถึง message stack และข้อมูลอื่น ๆ
async function boom(): Promise<void> { throw new Error("boom") }
async function run() {
try {
await boom();
} catch (e: unknown) {
if (e instanceof Error) {
console.error("Handled:", e.message);
} else {
console.error("Non-Error thrown:", e);
}
}
}
run();ใช้ typeof กับชนิดพื้นฐาน
โค้ดบางส่วนอาจส่งข้อความหรือชนิดพื้นฐานอื่น ๆ ออกมาเป็นข้อผิดพลาด ใช้ typeof เพื่อจำกัดชนิดและจัดการอย่างเหมาะสม
function throwString() { throw "bad" }
try {
throwString();
} catch (e: unknown) {
if (typeof e === "string") {
console.warn("string error:", e.toUpperCase());
} else {
console.warn("other error", e);
}
}ตัวตรวจสอบแบบกำหนดเอง
สร้าง ตัวตรวจสอบชนิดที่ผู้ใช้กำหนด เพื่อจดจำโครงสร้างที่ “คล้ายข้อผิดพลาด” ซึ่งมาจากชั้นต่าง ๆ
type ErrorLike = { message: string; code?: string };
function isErrorLike(e: unknown): e is ErrorLike {
return !!e && typeof e === "object" && "message" in e;
}
try {
throw { message: "oops", code: "E_BAD" };
} catch (e: unknown) {
if (isErrorLike(e)) {
console.error(e.message, e.code ?? "no-code");
} else {
console.error("unknown error", e);
}
}การบันทึกอย่างปลอดภัย
รวมการจัดการข้อผิดพลาดไว้ที่ศูนย์กลาง ตัวช่วยขนาดเล็กจะจำกัดชนิดและบันทึกข้อมูลอย่างปลอดภัย เพื่อหลีกเลี่ยงการล้มเหลวระหว่างการบันทึกเอง
function logErrorSafe(e: unknown): void {
if (e instanceof Error) {
console.error("Error:", e.message);
} else if (typeof e === "string") {
console.error("Error(string):", e);
} else {
try {
console.error("Error(obj):", JSON.stringify(e));
} catch {
console.error("Error(unknown)");
}
}
}
try { throw { oops: true } } catch (e: unknown) { logErrorSafe(e) }เคล็ดลับ
เคล็ดลับ:
- ควรใช้ unknown ใน catch
- จำกัดชนิดด้วย
instanceoftypeofหรือตัวตรวจสอบชนิด - อย่าคิดว่าค่าจะเป็น
Errorเสมอ เพราะโค้ดจากบุคคลที่สามอาจส่งค่าใด ๆ ออกมาเป็นข้อผิดพลาดได้
ตรวจสอบการระบุชนิดของข้อผิดพลาด
ตรวจสอบอย่างรวดเร็ว: เหตุใดจึงควรใช้ unknown ใน catch
สรุป
สรุป: จับข้อผิดพลาดเป็น unknown จำกัดชนิดด้วย instanceof/typeof หรือตัวตรวจสอบแบบกำหนดเอง และรวมการบันทึกอย่างปลอดภัยไว้ที่ศูนย์กลาง
คำถามที่พบบ่อย
บทเรียน “การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch”
กำหนดชนิดข้อมูลพารามิเตอร์ catch เป็น unknown จากนั้นจำกัดชนิดข้อมูลด้วย instanceof/typeof หรือตัวตรวจแบบกำหนดเองเพื่อจัดการข้อผิดพลาดอย่างปลอดภัย คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน
บทเรียน “การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Promise และการกำหนดชนิดข้อมูล async/await
- การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch
- รูปแบบการทำงานพร้อมกัน (all/settled/race) และชนิดข้อมูล