Les "rest parameters" sont l'équivalents des paramètres variadiques dans d'autres langages.
La fonction add
ci-dessous peut prendre une infinité de paramètres qui seront mises dans l'Array
valueList
.
const add = (...valueList) => {return valueList.reduce((total, value) => total + value, 0);};add(0, 1, 2, 3); // 6
Il vaut mieux éviter ce type d'usage du "rest".
Cela réduit l'extensibilité de la fonction et il est préférable de prendre un paramètre de type Array
.
const add = (valueList) => {return valueList.reduce((total, value) => total + value, 0);};add([1, 2, 3]); // 6
En revanche, cela peut s'avérer très pratique dans des cas de wrapping ou de décoration etc...
const wrapper = (funk, ...args) => {console.log(`Calling function with ${args.length} arguments.`);return funk(...args);};wrapper(add, 1, 2, 3);
La même syntaxe peut être utilisée avec le "destructuring" d'un objet :
const user = {firstName: 'Foo',lastName: 'BAR',email: 'foo.bar@wishtack.com',phoneNumber: '123'};const { firstName, lastName, ...remainingProperties } = user;console.log(remainingProperties); // { email: 'foo.bar@wishtack.com', phoneNumber: '123' }