Propriétés optionnelles (?)

Des propriétés qui peuvent, mais ne doivent pas obligatoirement, apparaître dans un objet.

Sur cette page

Exemple

#
TypeScript
interface Profile {
  name: string
  bio?: string
  level?: number
}

function card(profile: Profile): string {
  const bio = profile.bio ?? 'Aucune bio'
  return `${profile.name} (niveau ${profile.level ?? 1}): ${bio}`
}

console.log(card({ name: 'Léa', level: 7 }))
console.log(card({ name: 'Lucas', bio: 'J’apprends Python' }))
Résultat
Léa (niveau 7): Aucune bio
Lucas (niveau 1): J’apprends Python

Définition et utilisation

#

Un point d’interrogation après le nom d’un champ (avatar?: string) signifie que le champ est optionnel. Un objet qui ne le contient pas reste valide, et le type de ce champ est en pratique string | undefined.

Avant d’utiliser un champ optionnel, le compilateur exige de vérifier qu’il existe. Le plus pratique est d’utiliser les opérateurs ?. et ??, ou une simple condition.

Avec l’option exactOptionalPropertyTypes activée, un champ optionnel ne peut pas recevoir explicitement la valeur undefined. Cela distingue « le champ est absent » de « le champ est défini à undefined ».

Syntaxe

#
Syntaxe
interface Name {
  required: type
  optional?: type
}

Bonnes pratiques

#
  • La façon la plus simple de définir une valeur par défaut pour un champ optionnel est l’opérateur ??, ou la déstructuration avec une valeur par défaut.
  • Pour transformer tous les champs en optionnels, utilisez le type utilitaire Partial<T>.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.