ReadonlyArray<Type>

Un tableau en lecture seule : sans push, sort ni affectation par index.

Sur cette page

Exemple

#
TypeScript
function topScores(scores: ReadonlyArray<number>, count: number): number[] {
  return [...scores].sort((a, b) => b - a).slice(0, count)
}

const results: ReadonlyArray<number> = [72, 95, 64, 88]
console.log(topScores(results, 2))
console.log(results)
Résultat
[95, 88]
[72, 95, 64, 88]

Définition et utilisation

#

ReadonlyArray<Type> dĂ©crit un tableau qui ne peut pas ĂȘtre modifiĂ©. Il n’a aucune mĂ©thode de modification comme push, pop, splice, sort ou reverse, et une affectation comme scores[0] = 
 se termine par une erreur. Restent les mĂ©thodes qui se contentent de lire ou de crĂ©er un nouveau tableau : map, filter, slice, includes, join.

Une notation plus courte et Ă©quivalente est readonly Type[], et c’est justement ainsi que le compilateur affiche ce type dans ses messages. Choisissez un seul style pour votre projet. ReadonlyArray est parfois plus lisible avec des Ă©lĂ©ments complexes, par ex. ReadonlyArray<string | number> plutĂŽt que readonly (string | number)[].

Un tableau ordinaire peut ĂȘtre transmis lĂ  oĂč un tableau en lecture seule est attendu, mais pas l’inverse. Un paramĂštre de type ReadonlyArray<T> est donc une promesse : la fonction acceptera n’importe quel tableau et n’y changera rien. La protection n’agit qu’à la compilation ; dans le programme en cours d’exĂ©cution, c’est un tableau ordinaire.

Syntaxe

#
Syntaxe
const list: ReadonlyArray<Type> = [
]
const list2: readonly Type[] = [
]

ParamĂštres de type

#
  • Type

    type quelconque

    Le type des éléments du tableau.

Plus d’exemples

#
Des changements bloqués
TypeScript
function resetFirst(scores: ReadonlyArray<number>) {
  scores[0] = 0
  // Erreur : Index signature in type 'readonly number[]' only permits reading.
  scores.sort()
  // Erreur : Property 'sort' does not exist on type 'readonly number[]'.
}
La transmission Ă  une fonction qui modifie le tableau
TypeScript
function addBonus(scores: number[]) {
  scores.push(10)
}

addBonus(results)
// Erreur : Argument of type 'readonly number[]' is not assignable to parameter of type 'number[]'.
//   The type 'readonly number[]' is 'readonly' and cannot be assigned to the mutable type 'number[]'.

Bonnes pratiques

#
  • Typez les paramĂštres comme ReadonlyArray<T> si la fonction ne modifie pas le tableau. Elle acceptera alors aussi des tableaux en lecture seule, par exemple des constantes créées avec as const.
  • Pour trier sans muter, utilisez une copie [...list].sort() ou la mĂ©thode toSorted(), qui nĂ©cessite la version ES2023 dans lib.
  • ReadonlyArray fonctionne de façon superficielle : les objets du tableau restent modifiables. Pour bloquer aussi leurs champs, utilisez ReadonlyArray<Readonly<T>>.

Entrées associées

#

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