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.
  • Inclure une ligne de mutation directe (arr.sort() ou arr[0] = 0) précédée de // @ts-expect-error, pour démontrer que le compilateur la refuse. Cette ligne doit rester une instruction réelle : commentée, elle ne produit plus d'erreur, et la directive devient elle-même une erreur de compilation (« Unused '@ts-expect-error' directive »).
  • Pas de bibliothèque externe.

Exemple

À partir de original: readonly number[] = [5, 1, 4, 2, 3], sortie attendue :

[ 5, 1, 4, 2, 3 ]
[ 1, 2, 3, 4, 5 ]

La première ligne prouve que original est intact. Le second test est le compilateur lui-même : tsc doit terminer sans erreur, la ligne de mutation étant couverte par sa directive.

Espace solution
// À 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.