6 votes

Pourquoi a = null ? [] de type jamais[] ?

Pourquoi ai-je une inférence de type différente pour le tableau ?

const a = []; // any[]
const b = null ?? []; // never[] 

Démonstration ici

4voto

Andrey Tyukin Points 29032

La chose "correcte" à faire serait d'en déduire never[] pour le littéral de tableau vide [] car le type d'un littéral de tableau est la réunion des types de ses éléments, et never est la jointure d'un ensemble vide.

Cependant, puisque l'inférence never[] n'est généralement pas ce que l'utilisateur souhaite lorsqu'il écrit const a = [] ce cas particulier a reçu un traitement très spécial dans le compilateur et maintenant il commence par déduire implicitement any[] et ensuite affiner le type sur la base du flux de contrôle suivant.

Il ne semble pas y avoir de sens profond derrière cela : c'est simplement ce qui s'avère être le plus utile dans la plupart des cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X