Type never en Typescript

Le site never est très rarement utilisé dans les scripts, uniquement lorsque la fonction n’atteindra
n’atteindra jamais un déclaration de retour.

Ce qui arrive principalement pour 2 raisons :

  • la fonction lance une erreur
  • la fonction boucle à l’infini

Examinons un exemple du cas d’utilisation le plus courant : la fonction lance une erreur et n’atteint donc jamais l’instruction de retour.
erreur et n’atteint donc jamais l’instruction de retour :

function throwError(message: string): never {
  throw new Error(message);
}

À ne pas confondre avec la fonction void type :

function logger(message: string): void {
  console.log(message);
}

La différence étant que void est utilisé pour une fonction qui ne retourne rien,
techniquement, elle peut retourner null ou undefined. Si nous retournons accidentellement
quelque chose à partir d’une fonction qui renvoie void nous obtiendrions un message d’erreur.

Avec le never Cependant, une fonction ne retournera jamais rien.
nous l’annotons avec never pour dire que nous n’atteindrons jamais la fin de cette
fonction. Nous n’allons jamais exécuter la fonction complètement.

Il est très rare que nous ayons des fonctions qui doivent être typées avec never comme
valeur de retour. Par exemple, si nous ne lançons une erreur que de temps en temps, nous ne devons pas
nous ne devrions pas annoter la fonction avec jamais :

function sometimesThrowError(message: string): number {
  if (!message) {
    throw new Error(message);
  }

  return 42;
}

Dans le scénario ci-dessus, nous devrions quand même annoter la fonction comme retournant une valeur
number et non never car il existe un scénario dans lequel la fonction
atteint sa fin et revient.

On n’annote une fonction avec le type never, que lorsqu’elle never atteint sa
fin. S’il n’y a qu’une possibilité d’erreur, nous ne l’annotons pas de la mention never.

Laisser un commentaire