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.

Relaterade artiklar