Readonly<Type>

Crée un type dans lequel toutes les propriétés sont en lecture seule.

Sur cette page

Exemple

#
TypeScript
interface State {
  level: number
  exp: number
}

function levelUp(state: Readonly<State>): State {
  return { level: state.level + 1, exp: 0 }
}

const current: Readonly<State> = { level: 4, exp: 980 }
console.log(levelUp(current))
console.log(current)
Résultat
{ level: 5, exp: 0 }
{ level: 4, exp: 980 }

Définition et utilisation

#

Readonly<Type> ajoute le modificateur readonly à chaque champ. Vous pouvez lire un objet de ce type, mais toute tentative d’assigner une nouvelle valeur à un champ se termine par une erreur de compilation.

C’est une façon pratique de signaler qu’une fonction ne modifie pas l’objet reçu, ou de protéger l’état de l’application contre une mutation accidentelle.

La protection n’agit qu’à la compilation, et seulement de façon superficielle. Les objets imbriqués restent modifiables, et dans un programme en cours d’exécution vous pouvez changer l’objet sans problème, sauf si vous utilisez Object.freeze().

Syntaxe

#
Syntaxe
type New = Readonly<Type>

Paramètres de type

#
  • Type

    type d’objet

    Le type dont les champs doivent être en lecture seule.

Plus d’exemples

#
Une tentative de mutation
TypeScript
current.exp = 1000
// Erreur : Cannot assign to 'exp' because it is a read-only property.

Bonnes pratiques

#
  • Marquez les paramètres comme Readonly<T> quand la fonction ne doit pas les modifier. Le compilateur détectera les mutations accidentelles.
  • Pour les tableaux, utilisez readonly T[] ou ReadonlyArray<T>.

Entrées associées

#

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