typescript - Varför är a=null ?? [] av typen never[]?
Varför får jag olika typinferens här för arrayen?
const a = []; // any[]
const b = null ?? []; // never[]
Demo här
Svar #1
Det "korrekta" att göra skulle vara att härleda never[] för det tomma array-litteralet [], eftersom typen av ett array-litteral är sammanfogningen av typerna för dess element, och never är sammanfogningen av en tom mängd.
Men eftersom inferering av never[] vanligtvis inte är vad användaren avser när hen skriver const a=[], fick detta särskilda fall en mycket speciell behandling i kompilatorn, och nu börjar den med att implicit hereleda any[], och sedan förfina typen baserat på den efterföljande styrflödet.
Det verkar inte finnas någon djupare mening bakom det: det är helt enkelt det som visar sig vara mest användbart i de flesta fall.