Generic Constraints
Restrict generics using constraints so you can safely access properties while keeping flexibility.
Sometimes you want generics, but with rules. ## Example: must have length ```ts function logLength<T extends { length: number }>(val: T): T { console.log(val.length); return val; } logLength("hello"); logLength([1, 2, 3]); // logLength(10); ❌ ``` ## With interfaces ```ts interface HasId { id: number; } function printId<T extends HasId>(obj: T) { console.log(obj.id); } ``` ## Why constraints? So TypeScript knows what properties exist. ## Graph ```mermaid flowchart TD A[T] --> B{extends rule} B --> C[Allowed] B --> D[Rejected] ``` ## Remember - Use extends to limit generics - Keeps flexibility with safety