por qué desestructurar un booleano está funcionando. Por ejemplo
const condition = true const toto = { name: 'toto' } const other = { other: 'other', ...condition && toto } console.log({ other }) // { other: 'other', name: 'toto' } const falseCondition = false const otherWithoutToto = { other: 'other', ...falseCondition && toto } console.log({ otherWithoutToto }) // { other: 'other' }En el caso de falso booleano, no agregamos propiedad, de lo contrario lo haremos. En realidad, está funcionando bien, pero alguien puede explicarme por qué es posible.
Lo que estás usando aquí no es la desestructuración , es la propagación de la propiedad del objeto. Requiere que la expresión del lado derecho (RHS) de ... se evalúe como un objeto o algo que se pueda convertir en uno (con excepciones para null e undefined ). Luego toma las propiedades enumerables propias del objeto ylas copia en el objeto que se está creando. En el caso de su ejemplo, pueden ocurrir dos posibilidades para el siguiente código:
...(condition && toto) condition es true , por lo que la expresión anterior se evalúa como el objeto toto . No se evalúa como un valor booleano, sino como el último valor verdadero, que en su caso es el objeto toto . La sintaxis de distribución de propiedades del objeto toma las propiedades enumerables propias del objeto y las agrega al objeto que se está creando.
la condition es false , por lo que la expresión anterior se evalúa como el valor false . Esto significa que JavaScript trata el código anterior como ...false . Como false es una primitiva y no un objeto, JavaScript intenta convertirlo en uno envolviéndolo en un objeto booleano :
...new Boolean(false) ahora que el RHS de ... se ha convertido en un objeto, JavaScript toma las propiedades enumerables propias del objeto booleano y las agrega al objeto que se está creando. Como el booleano no tiene propiedades propias que sean enumerables, no se agrega nada al objeto creado.