Asking
Asking

Reputation: 4192

Type args in typescript

I have this situation in my typescript code:

const first = (value: any[]) => {

}
const test = (...args: any[]) => first(...args);

In function test I pass all params in first function. first(...args).

Doing this I get a typescript error: A spread argument must either have a tuple type or be passed to a rest parameter.(2556).

I notice many answers on this topic but they don't solve my issue.

How to solve this issue?

Upvotes: 4

Views: 3127

Answers (4)

Ali Faris
Ali Faris

Reputation: 18602

Call first with args

const test = (...args: any[]) => first(args);

Upvotes: 1

DEEPAK KUMAWAT
DEEPAK KUMAWAT

Reputation: 11

Typescript can be used to capture variable number of arguments into an array in a way similar to other C-like languages:

function varArgs(...args: any[]) {
  console.log(args.length);
}

To pass the array to a function accepting a variable number of arguments, spread syntax can be used:

function varArgs(...args: any[]) {
  console.log(...args);
}

This approach works just as well with arrow functions:

let varArgs = (...args: any[]) => {
  console.log(...args);
}

Upvotes: 1

TmTron
TmTron

Reputation: 19391

Your first() function expects to get an array/tuple.
So you can simply pass the array.

const first = (value: any[]) => {};
const test = (...args: any[]) => first(args);

Playground

or you can make the first method accept variable arguments:

const first = (...value: any[]) => {};
const test = (...args: any[]) => first(...args);

Playground

Upvotes: 2

Ryan Le
Ryan Le

Reputation: 8412

The error means that you need to use an Array and spread arg within it:

const first = (value: any[]) => {};
const test = (...args: any[]) => first([...args]);

Playground Link

Upvotes: 3

Related Questions