Défi
É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[](ouReadonlyArray<number>), pasnumber[]. - La copie interne doit utiliser
[...arr].sort(...)ouarr.slice().sort(...). - Pas de mutation de
arrà l'intérieur de la fonction. - Inclure une ligne de mutation directe (
arr.sort()ouarr[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.