Avatar ·

Types `unknown` et `any` en TypeScript : quelle est la différence et quand utiliser quoi ?

Bonjour à tous ! J'ai récemment commencé à étudier TypeScript et j'ai rencontré deux types qui, à première vue, semblent très similaires : `any` et `unknown`. Les deux permettent de stocker des valeurs de n'importe quel type, mais je sens qu'il y a une différence importante entre eux que je néglige.\n\nPar exemple, j'écris une fonction qui reçoit des données d'une API. Je ne sais pas à l'avance ce qui va arriver — cela peut être un objet, une chaîne ou un nombre. Voici comment je fais actuellement :\n\n```typescript\nfunction processData(data: any) {\n console.log(data.toUpperCase()); // Fonctionne sans erreur, mais peut échouer à l'exécution\n}\n```\n\nMais si j'essaie d'utiliser `unknown`, j'obtiens une erreur :\n\n```typescript\nfunction processDataSafe(data: unknown) {\n console.log(data.toUpperCase()); // Erreur : Object is of type 'unknown'\n}\n```\n\nPourquoi cela ? Apparemment, les deux types permettent de stocker n'importe quoi, mais `unknown` se comporte de manière plus stricte. J'ai lu que `unknown` est une alternative type-safe à `any`, mais je ne comprends pas complètement ce que cela signifie en pratique.