ในโลกของการพัฒนาซอฟต์แวร์ขนาดใหญ่ การจัดการโครงสร้างโค้ดให้มีความสม่ำเสมอและสามารถขยายได้ง่ายเป็นสิ่งสำคัญอย่างยิ่ง TypeScript Abstract Class คือกลไกที่ช่วยให้นักพัฒนามั่นใจว่าคลาสลูก ๆ ของเราจะปฏิบัติตามสัญญาทางพฤติกรรมที่เรากำหนดไว้ได้อย่างเคร่งครัด มันไม่ใช่แค่คำแนะนำ แต่คือการบังคับใช้ข้อตกลงในการออกแบบระบบระดับสูง
TypeScript Abstract Classes ทำงานอย่างไร?
โดยพื้นฐานแล้ว Abstract Class ใน TypeScript เปรียบเสมือนพิมพ์เขียวหรือรากแก้วของกลุ่มคลาส ซึ่งถูกออกแบบมาเพื่อให้มีฟังก์ชันบางส่วนที่เป็นค่าคงที่ หรือมีการทำงานร่วมกัน และต้องระบุเมธอดหลักๆ ที่จำเป็นสำหรับการใช้งาน โดยตัวมันเองไม่สามารถนำไป instantiate ได้ นั่นหมายความว่าคุณจะไม่สามารถเขียน `new MyAbstractClass()` เพื่อเรียกใช้อย่างเด็ดขาด เพราะวัตถุประสงค์เดียวของเราคือเพื่อมอบ ‘Contract’ (พันธะสัญญา) ให้กับผู้ที่จะเข้ามาสานต่อจากชั้นนี้
📌 ความแตกต่างระหว่าง Interface, Abstract Class, และ Pure Type Inheritance
- Interface (อินเทอร์เฟส): ใช้สำหรับนิยามรูปร่างและโครงสร้างข้อมูลเท่านั้น ว่าจะต้องมี Properties/Methods อะไรบ้าง แต่มันไม่ได้ให้โค้ดเริ่มต้นใด ๆ เลย
- Pure JavaScript / Typing System ทั่วไป: การกำหนดแค่รูปแบบการส่งผ่าน Argument แต่ไม่มีกลไกบังคับใช้ในระดับ Compiler อย่างชัดเจนเท่าระบบประเภทขั้นสูง
- TypeScript Abstract Class: คือจุดสมดุลที่ดีที่สุด มันทำหน้าที่เหมือน Interface ในแง่ของการ *ประกาศ* สิ่งที่ต้องทำ แต่ยังมีความพิเศษตรงที่คุณสามารถใส่ Logic เริ่มต้นหรือ Implementations บางส่วนให้กับคลาสลูกได้ ทำให้เราไม่ต้องเริ่มจากการเขียนฟังก์ชันเหล่านั้นใหม่ทั้งหมดตั้งแต่ศูนย์
- กล่าวโดยสรุป คล้ายกับการผูกมัดว่า