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

ข้อจำกัดเจเนอริกด้วย extends

จำกัดพารามิเตอร์ชนิดให้มีโครงสร้างตามที่กำหนด

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

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

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

ปัญหาเมื่อไม่มีข้อจำกัด

หากไม่มีข้อจำกัด TypeScript จะไม่ทราบว่าการดำเนินการใดใช้ได้กับ T จึงอนุญาตเฉพาะการดำเนินการที่ใช้ร่วมกันได้กับทุกชนิด
function getLength<T>(val: T): number {
  // return val.length; // Error — T might not have .length
}

การเพิ่มข้อจำกัด

ใช้ `T extends Shape` เพื่อกำหนดให้ T มีคุณสมบัติอย่างน้อยเท่ากับ Shape
function getLength<T extends { length: number }>(val: T): number {
  return val.length;
}
getLength('hello');  // OK — string has .length
getLength([1, 2]);   // OK — array has .length
// getLength(42);   // Error — number has no .length

การจำกัดให้เป็นอินเทอร์เฟซ

จำกัด T ให้ต้องนำอินเทอร์เฟซเฉพาะไปใช้
interface Named { name: string; }
function greet<T extends Named>(person: T): string {
  return 'Hello, ' + person.name;
}

ข้อจำกัด keyof

ใช้ `K extends keyof T` เพื่อจำกัด K ให้เป็นคีย์ของ T วิธีนี้ช่วยให้เข้าถึงคุณสมบัติได้อย่างปลอดภัย
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}
const age = getProperty({ name: 'Alice', age: 30 }, 'age'); // number

การขยายยูเนียน

สามารถจำกัด T ให้เป็นชนิดยูเนียนได้ ซึ่งจะจำกัดอาร์กิวเมนต์ชนิดข้อมูลให้เป็นค่าเฉพาะ
type Status = 'active' | 'inactive' | 'banned';
function setStatus<T extends Status>(status: T): void {
  console.log('Setting status:', status);
}

การจำกัดให้เป็นตัวสร้าง

จำกัด T ให้เป็นคลาสที่มีตัวสร้าง เพื่อให้คุณสร้างอินสแตนซ์ภายในฟังก์ชันได้
function create<T>(ctor: new () => T): T {
  return new ctor();
}

ข้อจำกัดหลายรายการด้วยอินเตอร์เซกชัน

จำกัด T ให้สอดคล้องกับอินเทอร์เฟซหลายรายการโดยใช้อินเตอร์เซกชัน
interface Serializable { serialize(): string; }
interface Loggable { log(): void; }
function process<T extends Serializable & Loggable>(item: T): void {
  item.log();
  console.log(item.serialize());
}

การสืบทอดข้อจำกัด

ข้อจำกัดทำงานร่วมกับการสืบทอดได้ หาก T ขยายคลาสพื้นฐาน คุณก็สามารถเรียกใช้เมธอดทั้งหมดของคลาสพื้นฐานได้
class Animal { breathe() { return 'breathing'; } }
function care<T extends Animal>(a: T): string { return a.breathe(); }

T ขยายตัวเองแบบเรียกซ้ำ

ข้อจำกัดสามารถอ้างอิงตัวเองเพื่อใช้กับโครงสร้างข้อมูลแบบเรียกซ้ำได้
interface Comparable<T> { compareTo(other: T): number; }
function max<T extends Comparable<T>>(a: T, b: T): T {
  return a.compareTo(b) >= 0 ? a : b;
}

ข้อความแสดงข้อผิดพลาดของข้อจำกัด

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

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

`K extends keyof T` จำกัด K ให้เป็นอะไร

สรุปทบทวน

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

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

บทเรียน “ข้อจำกัดเจเนอริกด้วย extends” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ข้อจำกัดเจเนอริกด้วย extends”

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

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

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

บทเรียน “ข้อจำกัดเจเนอริกด้วย extends” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ฟังก์ชันเจเนอริก: พารามิเตอร์ชนิด
  2. อินเทอร์เฟซและนามแฝงชนิดแบบเจเนอริก
  3. ข้อจำกัดเจเนอริกด้วย extends
  4. พารามิเตอร์ชนิดเริ่มต้น
← กลับไปที่ TypeScript Academy