Если я правильно понимаю, я думаю, что проблема заключалась в сравнении аргумента ... xs через &&, из-за которого рекурсия никогда не заканчивалась. Вы действительно заботитесь только о наличии следующего массива, который будет обрабатываться, остальное будет поймано следующей рекурсией.
Ошибка компилятора происходит из-за отсутствия определения типа для массива аргументов, и tsc выводит его из источника: но тип [any, ... any []] слишком узок. Ввод массива с помощью: any [] устраняет проблему.
Надеюсь, это поможет.
const map = (f, [x, ...rest]:any[]) => {
return (!x) ? [] : [f(x), ...map(f, rest)];
}
console.log(map(x=>x+10, [1,2,3]))