What are Generic Constraints?
Generic constraints let you limit what types your generics can accept. Instead of accepting any type, you can specify "only types that have certain properties" - making your code safer and more predictable.

The kitchen analogy
Imagine a kitchen machine that can
any ingredient. Generics are like that machine - they accept any type. But for a fruit salad, you only want fruits, not random ingredients. Generic constraints are like setting the machine to
Why use constraints?
- Type safety - Prevent errors by ensuring types have required properties
- Better intellisense - TypeScript knows what properties are available
- Clear intentions - Code explicitly states what types are acceptable
Basic constraint syntax
Use extends to constrain your generics to types that have specific properties.
function displayPrice<T extends { price: number }>(item: T)- Now TypeScript guarantees thatitem.priceexists and won't complain when you access it.
Common constraint patterns
T extends string- Only string typesT extends { id: number }- Only objects with anidpropertyT extends keyof User- Only keys that exist on the User type
Default types
You can also set fallback types when no generic is specified.
function process<T = string>(item: T)- If no type is provided, TypeScript assumesstring. Like setting your kitchen machine to make apple salad by default.
Real-world benefits
- Catch errors early - TypeScript prevents you from passing invalid types
- Flexible yet safe - Accept multiple types whilst ensuring they meet requirements
- Self-documenting - Constraints show exactly what your function expects