Рестом не пользовался пока, но он служит например для указания ... В аргументах функции, что их может быть много , что бы явно не прописывать . Спред например для развертывания массива ...arr , или наоборот собрать в массив через [...arr]
Деструктуризация это когда делаешь объект , а потом через let {его свойства } приравниваешь его к имени , и используешь их уже как свободные переменные