Pourquoi ai-je une inférence de type différente pour le tableau ?
const a = []; // any[]
const b = null ?? []; // never[]
Pourquoi ai-je une inférence de type différente pour le tableau ?
const a = []; // any[]
const b = null ?? []; // never[]
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 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.