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. - Le commentaire
// @ts-expect-errordoit 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é.