ANÚNCIO

~/questoes/programacao

Em uma interface TypeScript, como você torna uma propriedade opcional?

Responda, confira o feedback e use o resultado para orientar sua revisão.
Para fixar

Propriedades Opcionais em Interfaces TypeScript

Conceito central

Em TypeScript, interfaces definem contratos para objetos, especificando quais propriedades eles devem ter. Para permitir que uma propriedade não seja fornecida, você usa o símbolo '?' após o nome da propriedade, tornando-a opcional.

Por que essa resposta faz sentido

O símbolo '?' após o nome da propriedade é a sintaxe correta do TypeScript para marcar uma propriedade como opcional. Isso significa que um objeto implementando a interface pode existir sem fornecer esse valor específico.

Armadilhas comuns

  • Confundir '?' com 'undefined | tipo' — o primeiro torna a propriedade opcional, o segundo apenas permite undefined como valor mas mantém a propriedade obrigatória
  • Tentar usar palavras-chave de outras linguagens como 'optional' ou 'Optional' que não existem em TypeScript
  • Esquecer que propriedades opcionais podem ser undefined, então sempre verificar antes de usar seus métodos ou propriedades

Entenda as alternativas

A

TypeScript não possui uma palavra-chave 'optional' para este propósito. Essa não é a sintaxe reconhecida pela linguagem.

B

Embora 'undefined | tipo' funcione tecnicamente, não é a forma idioática ou recomendada. Além disso, força que a propriedade sempre seja declarada, apenas permitindo ser undefined.

C

Colchetes vazios [] são usados para arrays em TypeScript, não para tornar propriedades opcionais em interfaces.

D

O símbolo '?' é a forma padrão e correta. Exemplo: 'interface Usuario { nome: string; email?: string }' permite criar um usuário sem fornecer o email.

Dica prática: Ao criar uma interface, pense: se nem todos os objetos precisam dessa propriedade, use '?'. Exemplo prático: em uma interface de 'Produto', 'descricao?' é opcional, mas 'id' e 'nome' são obrigatórios.

Revise pensando: Como você tornaria a propriedade 'telefone' opcional em uma interface 'Contato' que já possui 'nome: string' e 'email: string'?