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

TupleToUnion และ UnionToIntersection

แปลงระหว่างทูเพิลกับยูเนียนด้วยโปรแกรม

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

TupleToUnion: แนวคิด

TupleToUnion แปลงชนิดทูเพิลเป็นยูเนียนของชนิดสมาชิก ซึ่งเป็นการทำย้อนกลับจากการสร้างทูเพิลด้วยชนิดแต่ละชนิด

type TupleToUnion<T extends readonly any[]> = T[number];
type A = TupleToUnion<[string, number, boolean]>; // string | number | boolean

T[number] ทำงานอย่างไร

การใช้ number เป็นดัชนีของทูเพิลจะเข้าถึงดัชนีตัวเลขทั้งหมดพร้อมกัน ซึ่ง TypeScript แสดงผลเป็นยูเนียนของชนิดสมาชิก

type Tuple = [string, number, boolean];
type Elements = Tuple[number]; // string | number | boolean

TupleToUnion ด้วย as const

ใช้ร่วมกับอาร์เรย์ as const เพื่ออนุมานยูเนียนจากอาร์เรย์ของค่า

const COLORS = ["red", "green", "blue"] as const;
type Color = typeof COLORS[number]; // "red" | "green" | "blue"

UnionToIntersection: แนวคิด

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

type UnionToIntersection<U> =
  (U extends any ? (x: U) => void : never) extends (x: infer I) => void
    ? I
    : never;

เหตุใดกลเม็ดฟังก์ชันจึงทำงาน

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

type A = UnionToIntersection<{ a: 1 } | { b: 2 }>;
// { a: 1 } & { b: 2 }

UnionToTuple: ปัญหาที่ยาก

การแปลงยูเนียนเป็นทูเพิลสามารถทำได้ในทางทฤษฎี แต่ต้องอาศัยลำดับการประเมิน ซึ่ง TypeScript ไม่รับประกัน จึงควรหลีกเลี่ยงในระบบจริง

// Not reliable — union member order is unspecified
// Use TupleToUnion (safe) not UnionToTuple (fragile)

การใช้งาน TupleToUnion ในทางปฏิบัติ

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

const ALLOWED_METHODS = ["GET", "POST", "PUT", "DELETE"] as const;
type HttpMethod = typeof ALLOWED_METHODS[number];
function request(method: HttpMethod) { /* ... */ }

การใช้งาน UnionToIntersection ในทางปฏิบัติ

ผสานอินเทอร์เฟซมิกซ์อินหลายรายการจากยูเนียนให้เป็นชนิดผสมเดียว

type Mixin1 = { log(): void };
type Mixin2 = { save(): Promise<void> };
type Combined = UnionToIntersection<Mixin1 | Mixin2>;
// { log(): void } & { save(): Promise<void> }

อินเตอร์เซกชันของชนิดพื้นฐาน

การทำอินเตอร์เซกชันของชนิดพื้นฐานที่ไม่เกี่ยวข้องกันจะได้ never เนื่องจากไม่มีค่าใดเป็นทั้ง string และ number ได้

type X = UnionToIntersection<string | number>; // never

การใช้สิ่งเหล่านี้ในข้อจำกัดแบบทั่วไป

ผสาน TupleToUnion และ UnionToIntersection ภายในข้อจำกัดแบบทั่วไป เพื่อสร้าง API ที่ยืดหยุ่นและปลอดภัยด้านชนิดข้อมูล

function merge<T extends object[]>(...args: T): UnionToIntersection<T[number]> {
  return Object.assign({}, ...args) as any;
}

ทบทวน: ทูเพิล ↔ ยูเนียน ↔ อินเตอร์เซกชัน

TupleToUnion ใช้การเข้าถึงดัชนี T[number] ส่วน UnionToIntersection ใช้กลเม็ดฟังก์ชันแบบกระจายร่วมกับ infer ทั้งสองอย่างเป็นเครื่องมือสำคัญสำหรับการจัดการชนิดขั้นสูง

ตรวจสอบความเข้าใจ

TupleToUnion<[string, number]> คืออะไร

สิ่งที่ได้เรียนรู้

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

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

บทเรียน “TupleToUnion และ UnionToIntersection” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “TupleToUnion และ UnionToIntersection”

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

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

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

บทเรียน “TupleToUnion และ UnionToIntersection” ใช้เวลานานแค่ไหน

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

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

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

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

  1. DeepPartial และ DeepReadonly
  2. ยูทิลิตี Flatten และ UnwrapPromise
  3. TupleToUnion และ UnionToIntersection
  4. การเผยแพร่ไลบรารีอรรถประโยชน์ด้านชนิด
← กลับไปที่ TypeScript Academy