?: / readonly Propriedades opcionais e readonly

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

?: / readonly Propriedades opcionais e readonly

? marca uma propriedade como opcional (pode estar ausente); readonly a marca como somente leitura (não pode ser reatribuída). Os dois modificadores mais comuns em propriedades de objetos.

GrupoComposição de Tipos
TipoSintaxe
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

interface Config {
  readonly name: string; // somente leitura: não pode ser reatribuído
  retries?: number;      // opcional: pode estar ausente
}

⚙️ Parâmetros

?:Marcador opcional: a propriedade pode ser omitida em literais de objeto
readonlyMarcador readonly: reatribuição após a inicialização é um erro de compilação (apenas no primeiro nível)

Retorno:Nenhum valor de retorno — ambos os modificadores existem apenas na camada de tipos e desaparecem após a compilação.

▶ Exemplo

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

Saída:

shop localhost 8080

(Saída de execução após a transpilação; escrever config.appName = "x" é um erro de compilação — appName é readonly)

💡 Observações

ℹ️ Info Propriedades opcionais incluem undefined em seu tipo: retries?: number é retries?: number | undefined sob strict.
⚠️ Atenção readonly bloqueia apenas a reatribuição: readonly arr: number[] ainda permite push, e campos aninhados continuam mutáveis. Para imutabilidade profunda, use Readonly<T> ou as const.
💡 Dica Leia propriedades opcionais com padrões via ?? (config.port ?? 8080) em vez de espalhar verificações de undefined.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P readonly vs const?
R const protege o vínculo da variável (sem reponto); readonly protege a propriedade (sem reatribuição). Campos de um objeto const continuam mutáveis a menos que marcados com readonly.
P Propriedade opcional vs T | undefined — há diferença?
R Sim: ? permite que a propriedade esteja inteiramente ausente; a?: T | undefined exige presença mas admite undefined. exactOptionalPropertyTypes impõe essa distinção.
P Como tornar um objeto inteiro (profundamente) readonly?
R Readonly<T> é superficial; use as const (trava nos literais) ou um tipo recursivo DeepReadonly para profundidade.
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%