Uma configuração de rotas precisa respeitar o mesmo formato em cada entrada. Ao anotar o objeto inteiro como Record<string, Route>, o TypeScript passa a enxergá-lo pelo tipo mais amplo. Com satisfies, você pode validar cada entrada e ainda obter a união dos nomes declarados.

type Route = { path: string; requiresLogin: boolean }

const routes = {
  home: { path: "/", requiresLogin: false },
  settings: { path: "/settings", requiresLogin: true },
} satisfies Record<string, Route>

type RouteName = keyof typeof routes

RouteName aceita "home" e "settings". Se você trocar requiresLogin por uma string, o compilador aponta a entrada inválida. Se precisa exigir um conjunto fechado de chaves, substitua string no Record pela união esperada.

Use com objetos definidos no código

O operador é útil em mapas de mensagens, tabelas de permissões e configurações mantidas no repositório. Ele verifica o código durante a compilação. Um objeto recebido por HTTP continua precisando de validação em tempo de execução. Veja como validar JSON com unknown.

Documentação de referência