Functions in TypeScript
The Authentication Bug That Shipped to Production
// auth.js - Our old JavaScript code
function authenticateUser(username, password, options) {
// Sometimes we called it with 2 args
// authenticateUser('alice', 'pass123')
// Sometimes with 3 args
// authenticateUser('alice', 'pass123', { rememberMe: true })
// The new payment code called it like this:
// authenticateUser('alice', 'pass123', true)
// BUG! options was supposed to be an object, not a boolean
if (options.rememberMe) { // Crashed here when options was true
setLongLivedToken();
}
}Function Type Basics
Basic Function Syntax
Return Type Inference
Optional Parameters
Basic Optional Parameters
Optional Parameters Must Be Last
Multiple Optional Parameters
Default Parameters
Basic Default Parameters
Default Parameters with Types
Default vs Optional
Rest Parameters
Basic Rest Parameters
Rest Parameters with Other Parameters
Rest Parameters with Union Types
Function Type Expressions
Basic Function Type
Function Types in Interfaces
Callback Function Types
Function Overloads
Basic Overloads
Overloads with Different Parameter Counts
Real-World Example: Search Function
This Parameter
Basic This Parameter
This Parameter in Classes
Generic Functions
Basic Generic Function
Generic Array Functions
Generic Constraints
Multiple Type Parameters
Async Functions
Basic Async Function
Error Handling in Async Functions
Async Function with Generic Return
Real-World Patterns
1. Request Handler Type
2. Middleware Pattern
3. Factory Pattern
4. Retry Pattern
Common Mistakes I Made
1. Not Typing Callback Parameters
2. Forgetting Return Types
3. Overusing Function Overloads
Your Challenge
Key Takeaways
What I Learned
Last updated