Featured image of post TypeScript Branded Types: Validación de tipos en tiempo de compilaciónFeatured image of post TypeScript Branded Types: Validación de tipos en tiempo de compilación

TypeScript Branded Types: Validación de tipos en tiempo de compilación

Deep dive into TypeScript branded types for nominal typing simulation: brand pattern, intersection types, validation functions, and use cases for IDs, currency, and emails.

Los tipos marcados (branded types) son una técnica para crear tipos nominales en TypeScript. Añaden una marca única a tipos estructuralmente compatibles para prevenir confusiones entre valores del mismo tipo subyacente.

El problema de los tipos estructurales

TypeScript usa tipado estructural. Una cadena de ID de usuario y una cadena de ID de producto son compatibles aunque representen conceptos distintos. Las branded types resuelven esto.

Patrones de branded types

Intersección con una marca literal: type UserID = string & { readonly __brand: 'UserID' }. Funciones constructoras con aserciones de tipo garantizan la seguridad.

Casos de uso

IDs de entidades, unidades de medida (px vs em), validación de entrada (Email vs string), cadenas sanitizadas vs no sanitizadas.

Advertencias

Las marcas se eliminan en tiempo de ejecución. Son herramientas de desarrollo y compilación. Combinar con validación en tiempo de ejecución (Zod, io-ts) para mayor seguridad.