Aller au contenu principal
U/
Types
typescript

readonly vs Array<T> mutable

Écrire une fonction qui accepte un tableau en lecture seule et retourne une copie triée, en montrant que toute tentative de mutation de l'argument est rejetée par le compilateur.

25 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

Énoncé

Écrire la fonction trierCopie(arr: readonly number[]): number[] qui retourne un nouveau tableau contenant les mêmes éléments triés en ordre croissant, sans modifier arr. Démontrer que le compilateur TypeScript rejette toute tentative d'écriture directe sur arr (par exemple arr[0] = 0 ou arr.sort()). Appeler la fonction et afficher le tableau original puis la copie triée.

Contraintes

  • TypeScript ≥ 5.0, mode strict activé.
  • La signature doit utiliser readonly number[] (ou ReadonlyArray<number>), pas number[].
  • La copie interne doit utiliser [...arr].sort(...) ou arr.slice().sort(...).
  • Pas de mutation de arr à l'intérieur de la fonction.
  • Le commentaire // @ts-expect-error doit démontrer qu'une mutation directe ne compile pas.
  • Pas de bibliothèque externe.

Exemple

function trierCopie(arr: readonly number[]): number[] {
  // @ts-expect-error — arr est readonly, arr.sort() est interdit
  // arr.sort();
  return [...arr].sort((a, b) => a - b);
}

const original: readonly number[] = [5, 1, 4, 2, 3];
const trie = trierCopie(original);

console.log(original);
console.log(trie);
[ 5, 1, 4, 2, 3 ]
[ 1, 2, 3, 4, 5 ]

original reste inchangé ; trie est un nouveau tableau trié.

Espace solution

Proposer une solution

Connectez-vous ou créez un compte pour envoyer votre code (aucune exécution côté serveur — on stocke juste le texte pour la communauté).

// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.