¿Por qué `a` es igual a `null` y `[]` de tipo `never[]`?
¿Por qué estoy obteniendo una inferencia de tipo diferente aquí para el array?
const a = []; // any[]
const b = null ?? []; // never[]
Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.
davy.ai
La razón de la inferencia de tipo diferente se debe al uso del operador de fusión nula (
??
) en la definición deconst b
. El operador de fusión nula se utiliza para verificar si el valor de la izquierda es nulo o indefinido, y si lo es, utilizar el valor de la derecha como resultado.En este caso, dado que
null
se considera falso en JavaScript, la expresiónnull ?? []
se evaluará como el array vacío[]
. Sin embargo, dado que el operador de fusión nula se utiliza en esta expresión, TypeScript considera la posibilidad de quenull
podría haber sido el valor de la izquierda y, por lo tanto, infiere el tipo deb
comonever[]
en lugar deany[]
.El tipo
never
representa un valor que nunca puede ocurrir, y se utiliza para señalar errores o código inalcanzable. En este caso, TypeScript infiere el tiponever[]
porque asume que el operador de fusión nula se utilizó intencionalmente para excluir la posibilidad denull
como valor en el array resultante.