Vamos a ver qué es y para qué se utiliza el operador Rest. A pesar de que utiliza la misma sintaxis que el spread (los tres puntos) su uso y objetivo es distinto.
Lo primero que vamos a hacer es analizar el objeto arguments el cual es accesible durante la ejecución de cualquier función. Nos vamos a dar cuenta que arguments tiene la forma de un array pero no es un array! Para convertirlo en array vamos a utilizar el método slice de los arrays.
Luego, vamos a implicar toda esta lógica utilizando el operador Rest. De esta forma vas a tener todo el contexto del por qué se introdujo y qué problema resuelve.