Typescript: использование оператора распространения, когда требуется хотя бы один параметр - PullRequest
0 голосов
/ 21 января 2019

Я учусь использовать параметр rest / оператор распространения в машинописи.Теперь мне нужно написать функцию, которая принимает массив в качестве параметра, и я хочу использовать оператор rest.Это функция:

insert(elem: number, ...elems: number[])

Параметр elem есть, потому что мне нужно, чтобы в массиве был хотя бы один элемент.

Итак, для такого массива:

const numArray = [1, 2, 3, 4]

Как передать массив функции?Я пробовал следующее, но это дало мне ошибку:

insert(...numArray)

Я понимаю ошибку, потому что numArray может иметь от 0 до N элементов, а функции нужен хотя бы один элемент, но я неЯ не знаю лучшего решения.

Есть ли способ добиться этого?

Примечание : функция insert является частью библиотеки, которую я разрабатываю, поэтому мне нужно сделать ее максимально удобной для использования, не зависящей от того, как пользователь будетиспользовать это

1 Ответ

0 голосов
/ 21 января 2019

Проблема в том, что массив имеет любую длину. Если вы наберете его как кортеж, с числовым элементом, за которым следует остаток любого числа, он будет работать.

function insert(elem: number, ...elems: number[]) { }

const numArray:[number, ...number[]] = [1, 2, 3, 4]

insert(...numArray)

Вы также можете просто использовать функцию, чтобы помочь с выводом, чтобы ввести const как кортеж:

function insert(elem: number, ...elems: number[]) { }
function tuple<T extends any[]>(...a: T) { return a;}
const numArray = tuple(1, 2, 3, 4);

insert(...numArray)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...