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

อินเทอร์เฟซกับ type: ควรใช้แบบใด

เลือกใช้ระหว่างอินเทอร์เฟซกับ type ให้เหมาะกับแต่ละสถานการณ์

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

เริ่มต้นใช้งาน

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

ความคล้ายคลึงกัน

ทั้งสองสามารถอธิบายโครงสร้างออบเจ็กต์ รวมพร็อพเพอร์ตีที่ไม่บังคับและพร็อพเพอร์ตีแบบอ่านอย่างเดียว ใช้เป็นชนิดข้อมูลของพารามิเตอร์ฟังก์ชัน และรองรับเจเนอริกได้
interface A { x: number; }
type B = { x: number; };
// Both describe the same shape

ความแตกต่างสำคัญ: การรวมการประกาศ

อินเทอร์เฟซรองรับการรวมการประกาศ แต่นามแฝงชนิดข้อมูลไม่รองรับ การประกาศนามแฝงชนิดข้อมูลซ้ำจะทำให้เกิดข้อผิดพลาด
interface Config { host: string; }
interface Config { port: number; } // OK — merged

type Settings = { host: string; };
// type Settings = { port: number; }; // Error

ความแตกต่างสำคัญ: ยูเนียนและอินเตอร์เซกชัน

นามแฝงชนิดข้อมูลสามารถอธิบายยูเนียน อินเตอร์เซกชัน ชนิดข้อมูลพื้นฐาน และทูเพิลได้ แต่อินเทอร์เฟซอธิบายได้เฉพาะโครงสร้างออบเจ็กต์เท่านั้น
type ID = string | number;        // union — only with type
type Nullable<T> = T | null;       // union — only with type
type Point = [number, number];     // tuple — only with type

ความแตกต่างสำคัญ: พร็อพเพอร์ตีที่คำนวณ

นามแฝงชนิดข้อมูลสามารถใช้ชนิดข้อมูลแบบแมปและชนิดข้อมูลแบบมีเงื่อนไขเพื่อคำนวณโครงสร้างของตนได้ แต่อินเทอร์เฟซไม่สามารถใช้สิ่งเหล่านี้ได้โดยตรง
type ReadonlyUser = Readonly<{ name: string; age: number }>; // mapped type
type Keys = keyof User; // only with type

การใช้อินเทอร์เฟซสำหรับข้อกำหนดของคลาส

อินเทอร์เฟซทำงานร่วมกับคลาสผ่าน `implements` ได้อย่างเป็นธรรมชาติ ทำให้บังคับคลาสให้มีพร็อพเพอร์ตีและเมธอดบางอย่าง
interface Repository<T> {
  findById(id: number): T | null;
  save(item: T): void;
}
class UserRepo implements Repository<User> { /* ... */ }

ประสิทธิภาพ: อินเทอร์เฟซกับชนิดข้อมูล

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

ข้อความแสดงข้อผิดพลาดแตกต่างกัน

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

คำแนะนำอย่างเป็นทางการของ TypeScript

ทีม TypeScript แนะนำให้ใช้อินเทอร์เฟซจนกว่าคุณจะต้องใช้คุณลักษณะที่จำเป็นต้องใช้ `type` นี่คือแนวปฏิบัติที่ระบุไว้ในเอกสารของทีม

ความสอดคล้องของทีมสำคัญที่สุด

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

ตารางสรุปการตัดสินใจ

ใช้อินเทอร์เฟซสำหรับ: ออบเจ็กต์ คลาส และการเพิ่มความสามารถให้ไลบรารี ใช้ type สำหรับ: ยูเนียน อินเตอร์เซกชัน ทูเพิล ชนิดข้อมูลพื้นฐาน ชนิดข้อมูลแบบแมป และชนิดข้อมูลแบบมีเงื่อนไข
// interface
interface User { name: string; age: number; }

// type (union)
type ID = string | number;

// type (tuple)
type Coord = [number, number];

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

โครงสร้างใดจำเป็นสำหรับการสร้างชนิดข้อมูลยูเนียนอย่าง `string | number`

สรุปทบทวน

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

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

บทเรียน “อินเทอร์เฟซกับ type: ควรใช้แบบใด” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “อินเทอร์เฟซกับ type: ควรใช้แบบใด”

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

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

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

บทเรียน “อินเทอร์เฟซกับ type: ควรใช้แบบใด” ใช้เวลานานแค่ไหน

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

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

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

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

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