Mastering TypeScript Generics
Mastering TypeScript Generics
Generics are one of TypeScript's most powerful features, yet they can be intimidating at first. Let me share what I've learned.
$2
At its core, a generic is a way to create reusable components that work with multiple types:
function identity(arg: T): T {
return arg;
}const result = identity("hello"); // type is string
const number = identity(42); // type is number
$2
Here's a practical example for API responses:
interface ApiResponse {
data: T;
error: string | null;
loading: boolean;
}async function fetchData(url: string): Promise> {
// implementation
}
$2
You can constrain generics to specific types:
function getProperty(obj: T, key: K): T[K] {
return obj[key];
}
Understanding generics has significantly improved my code quality and developer experience.
Key Learnings
- Generics enable type-safe reusable components
- Constraints help narrow down acceptable types
- Mapped types can transform existing types
- Conditional types add powerful logic to types