ReadonlyArray<Type>
Un tableau en lecture seule : sans push, sort ni affectation par index.
Exemple
#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)[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
#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
#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[]'.
}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 avecas const. - Pour trier sans muter, utilisez une copie
[...list].sort()ou la méthodetoSorted(), qui nécessite la versionES2023danslib. ReadonlyArrayfonctionne de façon superficielle : les objets du tableau restent modifiables. Pour bloquer aussi leurs champs, utilisezReadonlyArray<Readonly<T>>.
Entrées associées
#- Tableaux : number[] et Array<T>Les types de tableaux, oĂč tous les Ă©lĂ©ments ont le mĂȘme type.
- Readonly<Type>Crée un type dans lequel toutes les propriétés sont en lecture seule.
- readonlyUn modificateur qui bloque la modification dâun champ aprĂšs la crĂ©ation de lâobjet.
- TuplesDes tableaux de longueur fixe oĂč chaque position a son propre type.
Vous voyez une erreur ou il manque un exemple ? Ăcrivez-nous.