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

การรวมค่าคงที่เป็นยูเนียน

สร้างชุดค่าที่มีจำนวนจำกัดด้วยการรวมชนิดค่าคงที่เป็นยูเนียน

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

ยูเนียนของชนิดลิเทอรัล

ยูเนียนของลิเทอรัล ใช้จำลองค่าที่ต้องเป็นหนึ่งในตัวเลือกที่ทราบแน่ชัดหลายตัว ยูเนียนประเภทนี้เป็นพื้นฐานสำคัญของเครื่องจักรสถานะ enum และ API ที่ระบุชนิดอย่างถูกต้อง

type Status = 'idle' | 'loading' | 'success' | 'error';

let state: Status = 'idle';
state = 'loading';
console.log('State:', state);

การใช้ switch กับยูเนียนลิเทอรัล

switch ที่ใช้กับยูเนียนลิเทอรัลอ่านได้อย่างชัดเจน และคอมไพเลอร์รู้ว่าแต่ละกรณีต้องเป็นหนึ่งในค่าที่อนุญาต วิธีนี้ทำงานได้ดีเป็นพิเศษเมื่อใช้ร่วมกับการตรวจสอบความครอบคลุมทุกกรณี

type Status = 'idle' | 'loading' | 'done';

function label(s: Status): string {
  switch (s) {
    case 'idle': return 'Waiting';
    case 'loading': return 'Working';
    case 'done': return 'Finished';
  }
}
console.log(label('loading'));

การจัดการให้ครอบคลุมทุกกรณี

การจัดการสมาชิกทุกตัวของยูเนียนเรียกว่าการจัดการแบบ ครอบคลุมทุกกรณี เมื่อจัดการครบทุกกรณีแล้ว TypeScript จะพิสูจน์ได้ว่าฟังก์ชันคืนค่าเสมอ โดยไม่มีแขนงใดตกหล่น

type Dir = 'left' | 'right';

function step(d: Dir): number {
  if (d === 'left') return -1;
  return 1; // only 'right' remains
}
console.log(step('left'), step('right'));

เคล็ดลับการตรวจสอบความครอบคลุมด้วย never

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

type Shape = 'circle' | 'square';

function area(s: Shape): string {
  switch (s) {
    case 'circle': return 'pi r^2';
    case 'square': return 'a^2';
    default:
      const _exhaustive: never = s;
      return _exhaustive;
  }
}
console.log(area('circle'));

สร้างยูเนียนจากอ็อบเจ็กต์แบบ const

รูปแบบที่ใช้กันทั่วไปคือเก็บค่าไว้ในอ็อบเจ็กต์แบบ const แล้วสร้างยูเนียนจากค่าของอ็อบเจ็กต์ด้วย typeof obj[keyof typeof obj] แหล่งข้อมูลจริงเพียงแหล่งเดียว แต่ได้ผลลัพธ์สองแบบ

const Colors = { Red: 'red', Blue: 'blue' } as const;
type Color = typeof Colors[keyof typeof Colors];
// 'red' | 'blue'
const c: Color = Colors.Blue;
console.log(c);

สร้างยูเนียนจากคีย์

คุณยังสามารถสร้างยูเนียนของคีย์ด้วย keyof typeof obj ได้ด้วย วิธีนี้มีประโยชน์เมื่อคีย์ต่าง ๆ เป็นตัวระบุที่มีความหมายในตัวเอง

const ICONS = { home: 0, search: 1, profile: 2 } as const;
type IconName = keyof typeof ICONS;
// 'home' | 'search' | 'profile'
const name: IconName = 'search';
console.log(name, ICONS[name]);

ยูเนียนแบบจำแนกด้วยแท็กลิเทอรัล

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

type Action =
  | { type: 'add'; amount: number }
  | { type: 'reset' };

function reduce(a: Action): number {
  if (a.type === 'add') return a.amount;
  return 0;
}
console.log(reduce({ type: 'add', amount: 5 }));

การทำให้ชนิดแคบลงด้วยตัวจำแนก

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

type Event =
  | { kind: 'click'; x: number; y: number }
  | { kind: 'key'; code: string };

function handle(e: Event): string {
  if (e.kind === 'key') return 'Key ' + e.code;
  return 'Click ' + e.x + ',' + e.y;
}
console.log(handle({ kind: 'key', code: 'Esc' }));

การรวมยูเนียนหลายชุด

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

type Primary = 'red' | 'blue' | 'yellow';
type Secondary = 'green' | 'orange';
type Color = Primary | Secondary;

const c: Color = 'green';
console.log(c);

ยูเนียนในฐานะข้อจำกัดของฟังก์ชัน

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

type Align = 'left' | 'center' | 'right';

function setAlign(a: Align): void {
  console.log('Aligned', a);
}
setAlign('center');
// setAlign('top'); // Error

เหตุผลที่ยูเนียนลิเทอรัลดีกว่าสตริง

พารามิเตอร์ชนิด string ทั่วไปยอมรับค่าใดก็ได้ รวมถึงค่าที่พิมพ์ผิด ยูเนียนลิเทอรัลจะตรวจจับข้อผิดพลาดขณะคอมไพล์และบอกตัวเลือกที่ใช้ได้อย่างชัดเจน จึงช่วยยกระดับการดูแลรักษาโค้ดได้เป็นอย่างดี

type Method = 'GET' | 'POST' | 'PUT' | 'DELETE';

function request(m: Method, url: string): void {
  console.log(m, url);
}
request('POST', '/api/users');

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเรื่องยูเนียนลิเทอรัล

ทบทวน: การรวมลิเทอรัล

คุณได้เรียนรู้ที่จะ:

  • สร้างยูเนียนของลิเทอรัลสำหรับชุดตัวเลือกที่มีจำนวนจำกัด
  • จัดการยูเนียนเหล่านี้ให้ ครอบคลุมทุกกรณี โดยใช้เคล็ดลับ never เพื่อความปลอดภัย
  • สร้างยูเนียนจากอ็อบเจ็กต์แบบ const ผ่าน keyof typeof และ typeof obj[keyof typeof obj]
  • จำแนกรูปแบบต่าง ๆ ด้วยพร็อพเพอร์ตีแท็กแบบลิเทอรัล

หลักสูตรถัดไป: ชนิดพิเศษ unknown, never และ void

const ROUTES = { home: '/', about: '/about' } as const;
type Route = typeof ROUTES[keyof typeof ROUTES];
const r: Route = '/about';
console.log(r);

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

บทเรียน “การรวมค่าคงที่เป็นยูเนียน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การรวมค่าคงที่เป็นยูเนียน”

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

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

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

บทเรียน “การรวมค่าคงที่เป็นยูเนียน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ชนิดค่าคงที่ของสตริงและตัวเลข
  2. ค่าคงที่บูลีนและการอนุมานค่าคงที่
  3. การยืนยัน const ด้วย as const
  4. การรวมค่าคงที่เป็นยูเนียน
← กลับไปที่ TypeScript Academy