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 !