Opaque types to prevent accidental assignment.
__brand
as UserId
type UserId = number & { __brand: 'user' }; function create(id: number) { return id as UserId; }