ОК, выкуп № 1! Спасибо, куча. Я был бы рад, если бы вы посмотрели на этот другой вопрос, чтобы сообщить мне, есть ли номер погашения 2 ^ _ ^

ировать тот факт, что это плохоadd функция. Это вопрос об использовании деструктуризации массива с распространенным синтаксисом в TypeScript.

Это то что я пытаюсь

const add = ([x,...xs]) => {
  if (x === undefined)
    return 0
  else
    return x + add(xs)
}

console.log(add([1,2,3])) //=> 6

Но я понятия не имею, как добавить типы TypeScript к этому. Мое лучшее предположение, чтобы сделать что-то вроде этого (самый прямой перевод)

const add = (xs: number[]): number => {
  if (xs[0] === undefined)
    return 0;
  else
    return xs[0] + add(xs.slice(1));
};

console.log(add([1,2,3])); // => 6

Обе функции работают, но в TypeScript я теряю способность деструктурировать параметр массива, а тело функции перемешано с кучей уродливых вещей вродеxs[0] а такжеxs.slice(1) - даже если я абстрагирую их в свои собственные функции, это не главное.

Возможно ли добавить типы в параметры неструктурированного спреда в TypeScript?

Что я пробовал до сих пор

Как-то так работает для фиксированных массивов

// compiles
const add = ([x,y,z]: [number, number, number]): number => ...

Но, конечно, мне нужен ввод массива переменной длины. Я пробовал это, но это не компилируется

// does not compile
const add = ([x, ...xs]: [number, number[]]): number => ...

Ответы на вопрос(1)

Ваш ответ на вопрос