TypeScript Branded Types: modelado de dominio en tiempo de compilación

La mayoría de las bases de código en TypeScript tratan los identificadores de dominio como simples primitivos. Un userId es un string. Un orderId es un string. El amount de una transacción es un number. El sistema de tipos estructural de TypeScript los ve como formas idénticas, así que pasar un orderId donde se espera un userId compila sin problemas — hasta que tu base de datos devuelve "user not found" a las 2 de la madrugada y te pasas una hora rastreando un argumento intercambiado.

Esto es obsesión por lo primitivo, y los branded types eliminan por completo esta clase de problemas en tiempo de compilación, sin ningún costo en tiempo de ejecución.