GithubHelp home page GithubHelp logo

Comments (10)

wmitsuda avatar wmitsuda commented on June 9, 2024 3

IMHO, that solution sounds more like a workaround, not a proper solution.

I'd recommend leave it open.

from swr.

angelod1as avatar angelod1as commented on June 9, 2024 1

Weirdly, this stops the error... but... why!????

  const { data, error, isValidating } = useSWR(
    shouldFetch ? { query, sessionToken } : null,
    getInfo,
    {}, // <---- I added this
  )

from swr.

jarangutan avatar jarangutan commented on June 9, 2024 1

These two issues are related #2822

This started happening from release v2.2.3 from the removal of a type in #2759. Adding this back to the SWRHook interface or reverting to a version before v2.2.3 address the type error you got.

link to interface removed

// type that was removed
  <Data = any, Error = any>(
    key: Key,
    fetcher: BareFetcher<Data> | null
  ): SWRResponse<Data, Error>

Adding something ({} or undefined) after the fetcher makes the type fall onto one of the other overloads found in the SWRHook interface.

from swr.

angelod1as avatar angelod1as commented on June 9, 2024 1

@jarangutan thanks for your input. That was the 'fix' I used, although it's far from a fix — before I had proper types for my response, now, if I add any types it throws the error, and if I use {} I have zero types...

from swr.

angelod1as avatar angelod1as commented on June 9, 2024

I've read through #939 and couldn't find an answer

from swr.

jarangutan avatar jarangutan commented on June 9, 2024

Fully agree on it being far from a fix. My response was mostly to add context on where this goof started happening for others.

And interesting :o

I was getting one of the interfaces with SWRConfiguration<Data, Error, Fetcher<Data, SWRKey>> with my type added to it for the Response and Error whenever I added {} or undefined for the config partial after the fetcher. Are you saying you get no types if you add {} after the fetcher?

What typescript version are you using? I wonder if that's making a difference if you're getting no types adding the config.

from swr.

henryfung3a27 avatar henryfung3a27 commented on June 9, 2024

tl; dr

type QUERY_KEY = {
  query: string;
  sessionToken: string;
}
// ...
const fetcher: Fetcher<Result, QUERY_KEY> = (key) => fetch(...)
// ...
const { data, error, isValidating } = useSWR(
  { query, sessionToken } as QUERY_KEY,    // <-- add the type assertion
  fetcher,
)

After adding type assertion, compiler stopped complaining and yarn build success.

Detail

I also faced this error when upgrading nodejs from v18.15.0 to v18.19.0. (yeah, I didn't touch my project). After that I ran yarn build which then emitted this error.

I noticed that it only shows error when the key is NOT a literal type (string for example). If it is an object like in the example, there's complaints.

Adding {} to the third argument of useSWR fixed the issue

That's because you are trying to let the compiler thinks that you are overloading one of its "mutants".

Try adding the as Type assertion to the key of the useSWR hook (the first argument). It fixes the error.

from swr.

angelod1as avatar angelod1as commented on June 9, 2024

This solves it, although I dislike type assertions.

from swr.

henryfung3a27 avatar henryfung3a27 commented on June 9, 2024

Ikr, it used to "just works".

from swr.

DiegoBistro avatar DiegoBistro commented on June 9, 2024

The SRW documentation says to do this (but it doesn't work)

const { data: user } = useSWR(['/api/user', token], ([url, token]) => fetchWithToken(url, token))

While in reality in this way it works

const fetchUser = async (url: string, id: string) => await getUser(id);

const { data, error } = useSWR('/api/users/${userId}', () => fetchUser('/api/users/${userId}', userId) );

with many params:

const fetchUserWithParam = async (url: string, id: string, myParam: string) => await getUser(id, myParam);

const { data, error } = useSWR( [ '/api/users/${userId}', myParam ], () => fetchUserWithParam('/api/users/${userId}', userId, myParam ) );

from swr.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.