TypeScript automatically infers types in many situations. Understanding when and how inference works helps you write cleaner code.
Basic Inference
Function Return Inference
Contextual Typing
Generic Inference
Object Property Inference
Destructuring Inference
Control Flow Analysis
When Inference Falls Short
Explicit vs Inferred
Inference with Generics
Satisfies Operator
Best Practices
Summary
When to let TypeScript infer:
✓ Variable initialization
✓ Function return types (simple cases)
✓ Callback parameters
✓ Generic type arguments
✓ Object literals
When to use explicit types:
✓ Function parameters
✓ Public API return types
✓ Empty arrays/objects
✓ Complex generic usage
✓ When inference is wrong
Tools for better inference:
✓ const assertions (as const)
✓ satisfies operator
✓ Type guards
✓ Generic constraints
Conclusion
TypeScript's type inference is powerful and reduces boilerplate. Trust it for simple cases, but use explicit types for function parameters, public APIs, and when inference fails. The satisfies operator and const assertions help when you need validation without losing inference. Good type inference practices lead to cleaner, more maintainable code.