Sunday, June 2, 2024
 Popular · Latest · Hot · Upcoming
112
rated 0 times [  114] [ 2]  / answers: 1 / hits: 7309  / 4 Years ago, sun, october 4, 2020, 12:00:00

I want to know what is the type of this args that is being passed to my function below


const fetcher = async (...args) => {                                
~_ 0 const res = await fetch(...args);
1
~ 2 return res.json();
3 };

This is my fetcher function for SWR, and this is the error I'm getting


[tsserver 2556] [E] Expected 1-2 arguments, but got 0 or more.

SWR hook


const { error, data } = useSWR(`/api/albums/list/${user.id}`, fetcher)

More From » reactjs

 Answers
5

This is TypeScript signature of fetch function:


declare function fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;

If you use functions rest parameters ...args, your fetcher function can be called with zero parameters like this and tsc will not report errors.


fetcher();

Or, many parameters(like four parameters):


fetcher("localhost", {}, {}, {});

Then, you use spread syntax to call the fetch API. The parameter of spread does not satisfy the function signature of fetch(the parameter can NOT be zero or more than two), so tsc reports an error.


So you'd better modify it like this:


const fetcher = async (
input: RequestInfo,
init: RequestInit,
...args: any[]
) => {
const res = await fetch(input, init);
return res.json();
};

package version: "typescript": "^4.1.3"


[#2557] Tuesday, September 29, 2020, 4 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
kourtney

Total Points: 368
Total Questions: 103
Total Answers: 85

Location: Bonaire
Member since Sat, May 1, 2021
3 Years ago
kourtney questions
;