TypeScriptInterfaces et classes
Propriétés optionnelles (?)
Des propriétés qui peuvent, mais ne doivent pas obligatoirement, apparaître dans un objet.
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
#- Partial<Type>Crée un type dans lequel toutes les propriétés sont optionnelles.
- null et undefinedLes types pour l’absence de valeur, contrôlés par strictNullChecks.
- Types d’objetsUne description de la forme d’un objet : quels champs il a et de quel type.
- Required<Type>Crée un type dans lequel toutes les propriétés sont obligatoires.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.