TypeScript · Avançado · Inglês · Técnico
branded types
Técnica que cria tipos nominais artificiais ao intersectar um tipo primitivo com uma marca, como string & { __marca: 'Email' }, para impedir a mistura de valores parecidos.
Onde usar
Usado para distinguir IDs de entidades diferentes ou emails validados de strings soltas. A marca só existe no tipo: uma função de validação faz o cast uma única vez.
Em código
type Marca<T, B> = T & { __marca: B };
type UserId = Marca<string, 'UserId'>;
type PostId = Marca<string, 'PostId'>;
const u = 'u1' as UserId;
function ler(id: UserId) {}
ler(u);
// ler('u1' as PostId); // erroExemplos
Make UserId a branded type so it can't mix with PostId.
Faça UserId ser um branded type para não misturar com PostId.
The brand only exists at compile time.
A marca só existe em tempo de compilação.
Cuidado
A marca não existe em runtime e nada impede um cast indevido, então a segurança depende de criar o valor só em funções confiáveis.
Sinônimos
tipos nominais, opaque types