image auteur
Lucas BENTO-VERSACE 3min • 25-02-2023

Typescript - La différence entre unknown et any

Typescript - La différence entre unknown et any

Dans cet article, vous allez découvrir la différence entre le type unknown et any en TypeScript.

Introduction

En TypeScript, une variable de type any peut être affectée avec n'importe quelle type de donnée :

1
2
3
let myVar: any = 10;
myVar = 'Hello';
myVar = true;

Il n'est pas recommandé d'utiliser any car il supprime la restriction de type, alors que c'est la raison première d'utiliser TypeScript. Généralement any est utilisé pour aller plus vite ou contourner une erreur. Très mauvaise idée !

Depuis la version 3 de Typescript, le type unknown est utilisable. Il est assez similaire à any car vous pouvez affecter n'importe quelle type de valeur à une variable unknown.

1
2
3
let myVar: unknown = 0;
myVar = 'World';
myVar = false;

Mais dans ce cas, quelle est la différence entre unknown et any ?

Unknown vs Any

Pour comprendre la différence entre unknown et any, regardez ce code :

1
2
3
4
function myFunction(callback: any) {
  callback();
}
myFunction(10);

Imaginez que vous passiez l'entier 10 à cette fonction. Étant donné que le paramètre de la fonction est de type any, cela ne déclenchera pas d'erreur de compilation. C'est un problème puisque le script déclenchera alors une erreur pendant l'exécution : TypeError: callback is not a function.

C'est là que unknown entre en jeu.

Il accepte n'importe quelle valeur de type avec cependant une différence par rapport à any : Typescript applique la vérification du type.

Dans notre exemple, si vous changez le type any en unknown, voyez ce qu'il se passe :

1
2
3
4
5
function myFunction(callback: unknown) {
    callback();
    // Error: Object is of type 'unknown'.
  }
  myFunction(10);

Vous constatez que le paramètre callback est de type unknown et l'instruction callback() produit une erreur de compilation. Contrairement au type any, Typescript vous empêche de compiler tant que vous n'avez pas effectué une vérification solide.

Pour mettre en place une telle vérification, il faut appliquer la condition suivante :

1
2
3
4
5
6
7
8
function myFunction(callback: unknown) {
    if (typeof callback === 'function') {
      callback();
    } else {
        return callback;
    }
  }
  myFunction(10);

Désormais le type unknown a été réduit au type function dans le if, et dans ce cas là TypeScript vous laisse compiler.

La règle

Voici une petite règle pour comprendre la différence entre any et unknown :

  • Vous pouvez affectez n'importe quel type à unknown mais il vous faut effectuer une vérification de type pour opérer dessus.
  • Vous pouvez assignez n'importe quel type à any et effectuer n'importe quelle opération.

Conclusion

Pour conclure ce sont deux types spéciaux qui peuvent contenir n'importe quelle valeur, unknown est préférable à any car il est plus strict dans son fonctionnement.

N'hésitez pas à laisser un commentaire, en espérant que cet article vous a appris quelque chose !

Auteur

image auteur
Lucas BENTO-VERSACE Alternant chez Codewise / Étudiant en développement web lucas.bentoversace@ynov.com
"Alternant chez Codewise, passioné par l'informatique et les technologies depuis mon plus jeune âge. J'ai découvert le monde du web et depuis je ne m'en lasse pas ! Fan de jeux vidéos, de sports et de musiques. "