never
Le type d’une valeur qui ne se produit jamais : des fonctions qui ne se terminent pas normalement, et des cas impossibles.
Exemple
#type Shape = { kind: 'circle'; r: number } | { kind: 'square'; side: number }
function assertNever(value: never): never {
throw new Error(`Cas non traité : ${JSON.stringify(value)}`)
}
function area(shape: Shape): number {
switch (shape.kind) {
case 'circle':
return Math.round(Math.PI * shape.r ** 2)
case 'square':
return shape.side ** 2
default:
return assertNever(shape)
}
}
console.log(area({ kind: 'circle', r: 2 }))
console.log(area({ kind: 'square', side: 3 }))13 9
Définition et utilisation
#Le type never décrit une situation qui ne peut pas se produire. Une fonction qui renvoie never ne se termine jamais par un retour normal : elle lève toujours une exception ou tourne dans une boucle infinie.
Son usage le plus pratique est la vérification d’exhaustivité. Si vous traitez toutes les variantes d’une union dans un switch, la valeur a le type never dans la branche default. Quand quelqu’un ajoute une nouvelle variante et oublie de la traiter, le compilateur signale une erreur.
never apparaît aussi de lui-même comme résultat d’une restriction de type, une fois que vous avez écarté tous les types possibles, ainsi que dans les types conditionnels comme façon de « supprimer » un membre d’une union.
Syntaxe
#function fail(message: string): never {
throw new Error(message)
}Bonnes pratiques
#- La fonction
assertNeverdans la branchedefaultest un moyen simple de faire en sorte que le compilateur vous rappelle les nouvelles variantes. - N’utilisez pas
nevercomme « type vide » pour des variables. On ne peut rien lui assigner.
Entrées associées
#- void vs nevervoid signifie qu’une fonction ne renvoie pas de valeur utile, tandis que never signifie qu’une fonction ne revient jamais : elle lève une erreur ou tourne indéfiniment.
- voidLe type renvoyé par les fonctions qui ne renvoient rien.
- Types conditionnelsDes types choisis selon une condition : T extends U ? X : Y.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.