TypeScript функция вызова с параметрами останова от другого с параметрами останова

В TypeScript можно объявить функцию с параметрами "Rest Parameters":

function test1(p1: string, ...p2: string[]) {
    // Do something
}

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

function test2(p1: string, ...p2: string[]) {
    test1(p1, p2);  // Does not compile
}

Компилятор создает это сообщение:

Поставляемые параметры не соответствуют какой-либо сигнатуре цели вызова:    Невозможно применить тип 'string' к аргументу 2, который имеет тип 'string []'.

Как test2 вызывать test1 будут ли предоставленные аргументы?

Ответ 1

Попробуйте Spread Operator. Он должен учитывать тот же эффект, что и в Jeffery answer, но имеет более сжатый синтаксис.

function test2(p1: string, ...p2: string[]) {
    test1(...arguments);
}

Ответ 2

Нет способа передать p1 и p2 в test1 из test2. Но вы можете сделать это:

function test2(p1: string, ...p2: string[]): void {
    test1.apply(this, arguments);
}

Это использование Function.prototype.apply и arguments.

Если вам не нравится объект arguments или вы не хотите, чтобы все аргументы передавались точно в одном порядке, вы можете сделать что-то вроде этого:

function test2(p1: string, ...p2: string[]) {
    test1.apply(this, [p1].concat(p2));
}

Ответ 3

Да, он не компилируется, поскольку вы делаете неправильную вещь. Вот правильный путь:

function test1(p1: string, ...p2: string[]) {
    // Do something
}

function test2(p1: string, ...p2: string[]) {
    test1(p1, ...p2);
}