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

อินเทอร์เฟซและนามแฝงชนิดแบบเจเนอริก

ประยุกต์ใช้เจเนอริกกับอินเทอร์เฟซและชนิดแบบกำหนดเอง

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

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

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

ไวยากรณ์อินเทอร์เฟซชนิดทั่วไป

เพิ่ม `` หลังชื่ออินเทอร์เฟซเพื่อทำให้อินเทอร์เฟซเป็นชนิดทั่วไป ใช้ T ในชนิดของคุณสมบัติและลายเซ็นเมธอด
interface Box<T> {
  value: T;
  unwrap(): T;
}
const box: Box<number> = { value: 42, unwrap() { return this.value; } };

นามแฝงชนิดข้อมูลแบบทั่วไป

นามแฝงชนิดข้อมูลใช้ไวยากรณ์ `` แบบเดียวกัน
type Maybe<T> = T | null | undefined;
type Pair<A, B> = { first: A; second: B };
const p: Pair<string, number> = { first: 'Alice', second: 30 };

อินเทอร์เฟซคลังเก็บข้อมูลชนิดทั่วไป

กรณีใช้งานแบบคลาสสิกคืออินเทอร์เฟซคลังเก็บข้อมูลชนิดทั่วไปที่ทำงานกับชนิดเอนทิตีใดก็ได้
interface Repository<T> {
  findById(id: number): T | null;
  findAll(): T[];
  save(item: T): void;
  delete(id: number): void;
}

การนำอินเทอร์เฟซชนิดทั่วไปไปใช้

ระบุอาร์กิวเมนต์ชนิดข้อมูลเมื่อนำอินเทอร์เฟซชนิดทั่วไปไปใช้
class UserRepo implements Repository<User> {
  findById(id: number): User | null { return null; }
  findAll(): User[] { return []; }
  save(user: User): void {}
  delete(id: number): void {}
}

การขยายอินเทอร์เฟซชนิดทั่วไป

อินเทอร์เฟซชนิดทั่วไปสามารถขยายอินเทอร์เฟซชนิดทั่วไปอื่นได้
interface Named<T> { name: T; }
interface NamedAndAged<T> extends Named<T> { age: number; }

ชนิดการตอบกลับแบบทั่วไป

ชนิดการตอบกลับจาก API แบบทั่วไปที่ห่อหุ้มข้อมูลใดก็ได้
type ApiResponse<T> = {
  status: 'success' | 'error';
  data: T;
  timestamp: number;
};
const res: ApiResponse<User[]> = { status: 'success', data: [], timestamp: Date.now() };

พารามิเตอร์ชนิดข้อมูลหลายตัวในอินเทอร์เฟซ

อินเทอร์เฟซรองรับพารามิเตอร์ชนิดข้อมูลหลายตัว
interface KeyValue<K, V> {
  key: K;
  value: V;
}
const kv: KeyValue<string, number> = { key: 'age', value: 30 };

เมธอดชนิดทั่วไปในอินเทอร์เฟซที่ไม่ใช่ชนิดทั่วไป

อินเทอร์เฟซสามารถมีเมธอดชนิดทั่วไปได้โดยไม่ต้องทำให้อินเทอร์เฟซทั้งหมดเป็นชนิดทั่วไป
interface Transformer {
  transform<T, U>(input: T, fn: (val: T) => U): U;
}

ชนิดข้อมูลทั่วไปแบบเรียกซ้ำ

ชนิดข้อมูลทั่วไปสามารถอ้างอิงตัวเองเพื่อสร้างโครงสร้างแบบต้นไม้หรือรายการเชื่อมโยงได้
interface TreeNode<T> {
  value: T;
  children: TreeNode<T>[];
}

นามแฝงชนิดข้อมูลเทียบกับอินเทอร์เฟซสำหรับชนิดทั่วไป

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

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

คุณต้องระบุอะไรเมื่อนำ `interface Repository` ไปใช้

สรุปทบทวน

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

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

บทเรียน “อินเทอร์เฟซและนามแฝงชนิดแบบเจเนอริก” ฟรีหรือไม่

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

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

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

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

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

บทเรียน “อินเทอร์เฟซและนามแฝงชนิดแบบเจเนอริก” ใช้เวลานานแค่ไหน

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

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

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

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

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