TypeScript: Patrones avanzados que uso diariamente
Después de años usando TypeScript, he desarrollado un arsenal de patrones que uso constantemente. Aquí están mis favoritos.
1. Discriminated Unions
Perfecto para estados de carga:
type AsyncState<T> = | { status: 'idle' } | { status: 'loading' } | { status: 'success'; data: T } | { status: 'error'; error: Error };function handleState<T>(state: AsyncState<T>) { switch (state.status) { case 'success': return state.data; // TypeScript sabe que data existe case 'error': throw state.error; // TypeScript sabe que error existe } }
2. Template Literal Types
type EventName = 'click' 'focus' 'blur'; type HandlerName = on${Capitalize<EventName>}; // 'onClick' 'onFocus' 'onBlur' 3. Conditional Types
type Flatten<T> = T extends Array<infer U> ? U : T;type A = Flatten<string[]>; // string type B = Flatten<number>; // number
4. Mapped Types con Modificadores
type Mutable<T> = { -readonly [P in keyof T]: T[P]; };type Required<T> = { [P in keyof T]-?: T[P]; };
5. El patrón Builder con tipos
class QueryBuilder<T extends object = {}> { select<K extends string>(field: K): QueryBuilder<T & Record<K, unknown>> { // ... return this as any; } }const query = new QueryBuilder() .select('name') .select('age'); // Tipo: QueryBuilder<{ name: unknown; age: unknown }>
Pro tip: Usa satisfies para validar tipos sin perder inferencia.Conclusión
TypeScript es mucho más que "JavaScript con tipos". Dominar estos patrones te convertirá en un desarrollador más efectivo.
Comentarios (0)
Deja un comentario
Artículos Relacionados
Next.js 15: Guía completa de App Router
Todo lo que necesitas saber sobre el App Router de Next.js 15, desde los fundamentos hasta patrones avanzados de Server Components y streaming.
Optimización de performance: de 3s a 300ms
Caso de estudio real sobre cómo reduje el tiempo de carga de una aplicación en un 90% aplicando técnicas modernas de optimización.