TypeScript Generics ช่วยเขียน Code ที่ Type-Safe และ Reusable ได้พร้อมกัน แทนที่จะเขียน Function หลายตัว เขียน Generic Function ตัวเดียว
Generic Functions
// Generic Function:
// function getFirst<T>(arr: T[]): T
//
// Generic Constraints:
// function logLength<T extends HasLength>(item: T)
//
// keyof constraint:
// function getProperty<T, K extends keyof T>(obj: T, key: K): T[K]
//
// Generic Classes:
// class DataStore<T> - add(item: T), get(index: number): T
//
// Mapped Types:
// type Readonly<T> = readonly [K in keyof T]: T[K]
// type Partial<T> = [K in keyof T]?: T[K]
//
// Conditional Types:
// type IsString<T> = T extends string ? true : false
// infer keyword สำหรับ Extract Types
สรุป
TypeScript Generics เป็นฟีเจอร์ที่ทรงพลังที่สุดของ TypeScript ช่วยให้เขียน Code ที่ Type-Safe และ Reusable ได้ เริ่มจาก Generic Functions แล้วค่อยไปที่ Mapped Types และ Conditional Types
