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.

