ในโลกของการพัฒนาซอฟต์แวร์ที่ระบบมีความซับซ้อนมากขึ้น การจัดการกับประเภทข้อมูล (Types) อย่างมีประสิทธิภาพถือเป็นหัวใจสำคัญของโค้ดที่มีคุณภาพสูง โดยเฉพาะอย่างยิ่งเมื่อเราต้องสร้าง Component หรือโครงสร้างคลาสที่เป็นแม่แบบเพื่อนำไปใช้ใหม่หลายครั้ง ปัญหาคือ เราต้องการให้ Class นั้น ๆ มีความยืดหยุ่นพอที่จะรองรับการทำงานกับ Type ข้อมูลได้หลากหลาย แต่ก็ยังคงรักษาคุณสมบัติเรื่องความปลอดภัยทางชนิดพันธุ์ (Type Safety) ไว้ได้อย่างครบถ้วน นี่คือบทบาทหลักของ TypeScript Generics เมื่อถูกประยุกต์ใช้อย่างชาญฉลาดภายในขอบเขตของ class
Generics คืออะไร และทำไมจึงจำเป็นสำหรับ Classes?
โดยพื้นฐานแล้ว Generic เป็นกลไกในการเขียนฟังก์ชันหรือคลาสที่ไม่ผูกติดอยู่กับการใช้งาน Type ใดๆ ที่เจาะจง ทำให้มันสามารถดำเนินการร่วมกันบน Types ต่างๆ ได้เหมือนเดิม ไม่ว่าจะเป็น string, number, object หรือแม้แต่ Custom Interface สิ่งนี้ช่วยลด Code Duplication ในสถาปัตยกรรมขนาดใหญ่
หากไม่มี generics คล้ายกับการที่เราจะต้องประกาศ Repository สำหรับ `UserRepository`, อีกตัวหนึ่งสำหรับ `ProductRepository` ซึ่งจะมีรูปแบบคล้ายกันมาก การเพิ่ม generic เข้ามาทำให้เรากำหนด