Ho scritto questo piccolo memo a mio e tuo beneficio, perché per tanti che approcciano a linguaggi simili a nodeJS è difficile o comunque ostico capire cosa capperi fa la funzione con i 3 puntini.
Prima di tutto voglio che sappiate che destrutturare è una cosa troppo utile per non usarla, pertanto abbracciala con disinvoltura e con amore.
Prima cosa: cosa fa la destrutturazione?
Quando fai qualcosa del tipo:
const { pippo, pluto, paperino } = { pippo: 1, pluto: 2, paperino: 3 };
Stai essenzialmente “estraendo” delle proprietà da un oggetto e creando delle variabili con i loro valori. In questo caso, sì, stai creando tre variabili:
pippocon valore1plutocon valore2paperinocon valore3
Queste sono variabili a tutti gli effetti, quindi puoi richiamarle più avanti nel tuo codice.
Destrutturazione con valori predefiniti
Ora, se fai:
const { page = 1, pageSize = 20, cache = 'cache', ...filters } = params;
page,pageSize, ecachesono variabili estratte daparams, e separamsnon contiene questi valori, verranno utilizzati i valori predefiniti (1,20,'cache')....filtersraccoglie tutte le altre proprietà diparamsche non sono state esplicitamente estratte.
Così come page, pageSize e cache, potrai usare anche filters come costante da lì in poi disponibile nel tuo codice.
Facciamo un esempio completo:
Supponiamo di avere questo oggetto:
const params = { pippo: 10, pluto: 20, paperino: 30, page: 5 };
Ora facciamo la destrutturazione:
const { page = 1, pageSize = 20, cache = 'cache', ...filters } = params;
Ecco cosa succede:
page: Viene preso daparamsed è5.pageSize: Non esiste inparams, quindi viene assegnato il valore predefinito20.cache: Non esiste inparams, quindi viene assegnato il valore predefinito'cache'.filters: Contiene tutte le altre proprietà diparams, cioè{ pippo: 10, pluto: 20, paperino: 30 }.
Cosa succede a filters?
Dopo la destrutturazione, filters diventa un oggetto che contiene tutto ciò che non è stato esplicitamente estratto. Quindi sì, le proprietà che non vengono destrutturate (come pippo, pluto, paperino), finiscono in filters.
Risultato:
pageè5(viene preso daparams).pageSizeè20(valore predefinito).cacheè'cache'(valore predefinito).filtersè{ pippo: 10, pluto: 20, paperino: 30 }.
Quindi, sì, se usi ...filters, le costanti che hai definito all’inizio, come page, pageSize, e cache, non saranno incluse in filters, ma saranno create come variabili distinte.
Conclusione:
page,pageSize,cachevengono create come variabili a sé stanti, con valori presi daparams(o predefiniti se non ci sono).filtersraccoglie tutte le proprietà diparamsche non sono state estratte (comepippo,pluto, epaperinoin questo caso).


