0Pricing
TypeScript Academy · บทเรียน

void, never และลายเซ็นฟังก์ชัน

ทำความเข้าใจ void สำหรับฟังก์ชันที่ไม่ส่งค่ากลับ และ never สำหรับโค้ดที่ไม่สามารถเข้าถึงได้

void, never และลายเซ็นฟังก์ชัน เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

ชนิดผลลัพธ์พิเศษสองแบบ ได้แก่ void และ never ใช้แทนฟังก์ชันที่ไม่สร้างค่าที่มีประโยชน์ และฟังก์ชันที่ไม่ทำงานเสร็จตามปกติ

void: ไม่มีค่าผลลัพธ์ที่มีความหมาย

ใช้ void เมื่อฟังก์ชันทำผลข้างเคียงแต่ไม่คืนค่า ฟังก์ชันสามารถคืนค่า undefined ได้ แต่ void สื่อว่าควรไม่นำค่าผลลัพธ์ไปใช้
function logError(msg: string): void {
  console.error(msg);
  // implicit return undefined
}

ความแตกต่างระหว่าง void และ undefined

void และ undefined มีความคล้ายกันแต่แตกต่างกัน ฟังก์ชันที่มีชนิดเป็น void สามารถคืนค่า undefined ได้ แต่ void สื่อว่าผู้เรียกควรละเว้นค่าผลลัพธ์
const fn: () => void = () => 42; // Allowed! Caller ignores return
const fn2: () => undefined = () => 42; // Error

void ในฟังก์ชันเรียกกลับ

เมื่อกำหนดชนิดให้พารามิเตอร์ฟังก์ชันเรียกกลับ void จะบอกว่าผู้เรียกไม่ใช้ค่าผลลัพธ์ ทำให้ฟังก์ชันเรียกกลับสามารถคืนค่าชนิดใดก็ได้
function run(cb: () => void): void { cb(); }
run(() => 'hello'); // OK — return value ignored

never: ชนิดที่ไปไม่ถึง

never แทนค่าที่ไม่มีทางเกิดขึ้น ฟังก์ชันที่คืนค่า never จะโยนข้อผิดพลาดหรือวนซ้ำไม่สิ้นสุด
function fail(msg: string): never {
  throw new Error(msg);
}
function loop(): never {
  while (true) {}
}

never ในการตรวจสอบความครบถ้วน

ใช้ never ในคำสั่ง switch เพื่อให้แน่ใจว่าจัดการทุกกรณีของยูเนียนแล้ว การกำหนดค่าให้ never จะทำให้เกิดข้อผิดพลาดหากมีกรณีใดตกหล่น
type Shape = 'circle' | 'square';
function area(s: Shape): number {
  switch (s) {
    case 'circle': return 3.14;
    case 'square': return 1;
    default:
      const _: never = s; // Error if a new shape is added
      return 0;
  }
}

never เป็นชนิดย่อยของทุกชนิด

สามารถกำหนดค่า never ให้กับทุกชนิดได้ เพราะ never ไม่เคยเกิดขึ้น จึงสอดคล้องกับชนิดใด ๆ โดยปริยาย แต่ไม่มีชนิดอื่นใดที่กำหนดค่าให้ never ได้

ลายเซ็นชนิดฟังก์ชัน

ชนิดฟังก์ชันเขียนในรูป `(param: Type) => ReturnType` ซึ่งอธิบายฟังก์ชันในฐานะค่าแบบชั้นหนึ่ง
type Handler = (event: MouseEvent) => void;
type Transform = (input: string) => string;

ลายเซ็นการเรียกใช้ในอินเทอร์เฟซ

อินเทอร์เฟซสามารถกำหนดชนิดที่เรียกใช้ได้โดยใช้รูปแบบลายเซ็นการเรียกใช้
interface Formatter {
  (value: string): string;
  locale: string;
}

ลายเซ็นการสร้าง

อินเทอร์เฟซยังสามารถกำหนดชนิดที่สร้างออบเจ็กต์ได้ โดยใช้คีย์เวิร์ด new ในลายเซ็นการสร้าง
interface Constructor {
  new (name: string): Animal;
}

การรวม void และ never ในการจัดการข้อผิดพลาด

ฟังก์ชันที่โยนข้อผิดพลาดเสมอให้ใช้ never ส่วนฟังก์ชันที่กลืนข้อผิดพลาดและไม่คืนค่าให้ใช้ void ความแตกต่างนี้สำคัญต่อการวิเคราะห์ลำดับการควบคุม
function orThrow(val: string | null): string {
  if (val === null) fail('null!'); // never
  return val; // TypeScript knows this is reachable
}

ตรวจสอบอย่างรวดเร็ว

ชนิดผลลัพธ์ใดสื่อว่าฟังก์ชันจะโยนข้อผิดพลาดเสมอและไม่คืนค่าตามปกติ

สรุปทบทวน

ใช้ void กับฟังก์ชันที่ทำผลข้างเคียงและไม่มีค่าผลลัพธ์ที่มีความหมาย ใช้ never กับฟังก์ชันที่โยนข้อผิดพลาดหรือวนซ้ำ never ช่วยตรวจสอบความครบถ้วนและเป็นชนิดย่อยของทุกชนิด

คำถามที่พบบ่อย

บทเรียน “void, never และลายเซ็นฟังก์ชัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “void, never และลายเซ็นฟังก์ชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “void, never และลายเซ็นฟังก์ชัน”

ทำความเข้าใจ void สำหรับฟังก์ชันที่ไม่ส่งค่ากลับ และ never สำหรับโค้ดที่ไม่สามารถเข้าถึงได้ คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “void, never และลายเซ็นฟังก์ชัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คำอธิบายชนิดของพารามิเตอร์และค่าที่ส่งกลับ
  2. พารามิเตอร์เสริมและค่าเริ่มต้น
  3. พารามิเตอร์ส่วนที่เหลือและการกระจายพร้อมชนิด
  4. void, never และลายเซ็นฟังก์ชัน
← กลับไปที่ TypeScript Academy