Assim como o spread operator, o rest também é escrito com retecências ... e nos permite transformar um número indeterminado de parâmetros em um array.
Seguindo a ordem dos elementos, name, country e birth recebem os três primeiros valores do array, e o books recebe o resto, no formato de um array.
Para resumir o rest, quando você põe ...qualquerCoisa como parâmetro numa função significa: Junte todos os parâmetros restantes.