ExpertiDict

TypeScript · Avançado · Inglês · Técnico

branded types

/ˈbɹændɪd taɪps/substantivo

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); // erro

Exemplos

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

Veja também

Todos os termos de TypeScript