as const Asserção as const

Última atualização: 2026-10-22

as const Asserção as const

as const congela um literal em seu tipo constante mais profundo: toda propriedade se torna readonly, todo valor estreita para seu tipo literal (string, number, boolean) e arrays se tornam tuplas somente leitura. É o núcleo do padrão clássico de derivar tipos união a partir de uma tabela de constantes.

GrupoRestrição e Asserções de Tipos
TipoOperador
Modo strictNão necessário

ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.

📝 Sintaxe

const ROLES = ["admin", "editor", "viewer"] as const;
type Role = (typeof ROLES)[number];   // "admin" | "editor" | "viewer"

const THEME = { mode: "dark", fontSize: 14 } as const;
// { readonly mode: "dark"; readonly fontSize: 14 }

⚙️ Parâmetros

as constAplicado a uma expressão literal: infere os tipos literais somente leitura mais estreitos em vez dos tipos amplos padrão (string, number, arrays mutáveis)

Retorno:Sem efeito em tempo de execução — as const desaparece após a transpilação; ele apenas troca o tipo inferido em tempo de compilação pela sua versão somente leitura mais estreita.

▶ Exemplo

Edite o código abaixo e clique em Testar para ver o resultado transpilado:

Saída:

admin/editor/viewer
role set to editor
dark 14

(Saída de execução após a transpilação. setRole("editor") passa porque as const transforma Role em uma união literal — sem as const, ROLES seria inferido como string[] e setRole("editor") não compilaria)

💡 Observações

ℹ️ Info as const é profundo: propriedades aninhadas também se tornam readonly e estreitam para literais. Isso difere de Readonly<T>, que é raso.
⚠️ Atenção Depois de as const, nenhuma propriedade pode ser reatribuída e não é possível usar push em arrays — erros em tempo de compilação. Construa uma cópia mutável com spread: { ...DEFAULT_THEME, mode: "light" }.
💡 Dica Combinação clássica: (typeof CONST)[number] transforma um array as const em uma união literal, tornando a tabela de constantes a fonte única da verdade — adicione um papel e o tipo acompanha automaticamente.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Qual é a diferença entre uma variável const e as const?
R const apenas impede reatribuir a variável — as propriedades do objeto continuam mutáveis e a inferência continua ampla (string); as const estreita o próprio tipo para literais somente leitura. const trava o vínculo; as const trava o tipo.
P Como derivar um tipo união a partir de um array as const?
R Dois passos: typeof ARR obtém o tipo do array, e o acesso indexado [number] faz a união de todos os tipos de elementos: type Role = (typeof ROLES)[number]. Esse padrão oficial evita manter duas listas.
P Todo literal de objeto deveria receber as const?
R Não. Ele serve a constantes genuínas: snapshots de configuração, tabelas de valores de enum, action types. Objetos que serão mutados ou preenchidos a partir de estado mutável não devem usá-lo — você só lutaria contra erros de readonly e acumularia asserções.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%