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

สมาชิก rest ของทูเพิลและชนิดข้อมูลเคอร์รี

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

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

บทนำ

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

พื้นฐานของทูเพิลแบบแปรผันจำนวน

รูปแบบ [...A, L]: เริ่มด้วยอาร์กิวเมนต์ส่วนต้น (ทูเพิล A) แล้วตามด้วยอาร์กิวเมนต์สุดท้าย (L) รูปแบบนี้เป็นหัวใจสำคัญของตัวช่วยต่าง ๆ

type HeadTail<A extends any[], L> = [...A, L]

function callWithLast<A extends any[], L, R>(fn: (...args: [...A, L]) => R, last: L, ...head: A): R {
  return fn(...head, last)
}

// Example
function join3(a: string, b: number, c: boolean) { return `${a}-${b}-${c}` }
const r = callWithLast(join3, true, "x", 42)   // ok → string

ตัวช่วยเคอร์รี

เคอร์รีขนาดเล็ก: ด้วย [...A, L] ชนิดข้อมูลของทั้งส่วนต้นและส่วนสุดท้ายจึงถูกต้อง

function curryLast<A extends any[], L, R>(fn: (...args: [...A, L]) => R) {
  return (last: L) => (...head: A) => fn(...head, last)
}

const curried = curryLast(join3)
const out = curried(true)("x", 42) // string

curryFromFn ทั่วไป

วิธีแก้ปัญหาทั่วไป: อนุมานส่วนหางและส่วนสุดท้ายจาก Parameters<F> เพื่อคงจำนวนพารามิเตอร์และชนิดข้อมูลของพารามิเตอร์เหล่านั้นไว้

type Fn = (...args: any[]) => any

type Tail<T extends any[]> = T extends [...infer H, any] ? H : never

type Last<T extends any[]> = T extends [...any[], infer L] ? L : never

function curryFromFn<F extends Fn>(fn: F) {
  type A = Tail<Parameters<F>>
  type L = Last<Parameters<F>>
  return (last: L) => (...head: A) => fn(...head, last)
}

const cur = curryFromFn(join3)
const o2 = cur(true)("x", 42) // still string

ประกอบฟังก์ชันด้วยทูเพิล

ส่งข้อมูลจาก A → B → C ด้วยการประกอบฟังก์ชัน โดยคงอาร์กิวเมนต์ในทูเพิล A ไว้และเชื่อมชนิดข้อมูลที่ส่งกลับต่อกัน

function compose<A extends any[], B, C>(g: (b: B) => C, f: (...args: A) => B) {
  return (...args: A): C => g(f(...args))
}

function len(a: string, b: number) { return `${a}${b}`.length }
function isEven(n: number) { return n % 2 === 0 }

const comp = compose(isEven, len)
const ok = comp("id", 99) // boolean

เคล็ดลับ

เคล็ดลับ:

ทูเพิลแบบแปรผันจำนวนต้องใช้ TS 4.0 ขึ้นไป ควรอัปเดตเป้าหมายให้เป็นปัจจุบัน

ช่วยชี้แนะคอมไพเลอร์: บางครั้งการเขียนพารามิเตอร์ชนิดข้อมูลอย่างชัดเจนจะช่วยปรับปรุงการอนุมาน

การพยายามทำให้การออกแบบ APIs ทั่วไปเกินไปจะเพิ่มความซับซ้อน ตัวช่วยที่เรียบง่ายมีประสิทธิภาพมากที่สุด

ตรวจสอบลายเซ็นของเคอร์รี

ตรวจสอบอย่างรวดเร็ว: ลายเซ็นใดจับอาร์กิวเมนต์ any ใน A และอาร์กิวเมนต์สุดท้าย L สำหรับตัวช่วยเคอร์รี

ทบทวน

ทบทวน: จำลองรายการอาร์กิวเมนต์ด้วย [...A, L] เขียนตัวช่วยเคอร์รีและการประกอบฟังก์ชันขนาดเล็ก และคงชนิดข้อมูลไว้โดยอัตโนมัติ

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

บทเรียน “สมาชิก rest ของทูเพิลและชนิดข้อมูลเคอร์รี” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “สมาชิก rest ของทูเพิลและชนิดข้อมูลเคอร์รี”

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

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

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

บทเรียน “สมาชิก rest ของทูเพิลและชนิดข้อมูลเคอร์รี” ใช้เวลานานแค่ไหน

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

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

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

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

  1. สมาชิก rest ของทูเพิลและชนิดข้อมูลเคอร์รี
  2. ประกอบฟังก์ชันและอาร์กิวเมนต์อย่างปลอดภัย
  3. ตัวสร้างที่มีชนิดข้อมูลเข้มงวด
← กลับไปที่ TypeScript Academy