Ответ
Rest и Spread используют одинаковый синтаксис (...), но работают противоположно:
Spread разворачивает массив/объект на отдельные элементы:
const arr = [1, 2, 3];
console.log(...arr); // 1 2 3
const obj1 = {a: 1};
const obj2 = {...obj1, b: 2}; // {a: 1, b: 2}
Rest собирает оставшиеся элементы в массив/объект:
function sum(a, ...rest) {
// rest = [2, 3] при вызове sum(1, 2, 3)
}
const {a, ...rest} = {a: 1, b: 2, c: 3};
// rest = {b: 2, c: 3}
Ключевое отличие: Spread - разбирает, Rest - собирает. Spread используется в выражениях, Rest - в объявлениях параметров/деструктуризации.