Skip to content

Typescript doesn't work properly for suspense configuration #4157

@3pleFly

Description

@3pleFly

# Bug report

## Description / Observed Behavior
Typescript is not properly inferring the correct type, when suspense is passed as a parameter. It works right when suspense is switch true/false inside the configuration. However it can't infer the types if you pass suspense as a parameter via an intermediate function

What kind of issues did you encounter with SWR?
This forces me to use unnecessary checks, or casting.

## Expected Behavior

How did you expect SWR to behave here?

I expected the types to correctly infer the data type, removing 'undefined' if it receives suspense: true.

## Repro Steps / Code Example
JYWwDg9gTgLgBAVwM4FMDKB1ASnAZlCEOAciQHcpiBuAKDpQA9JY4BjCAOyXmRQFVUUOAF44ACiTIwKLigBccAEYQIAGxQBDDgEoRAPjgBvGnDhQUMBFA6JUmLGIBEAaRQBPRwBpxu4QcNmFlY2HChkcAAKBCDAqAA83FDAHADmemJi5khqAG4ovgaoMAAqoCgQCDAZBYHZqnlOABIoqqoQcGTQqgAmjtreAEwArAAMI9q6AL7eAZJI0rJwk9o0k

import useSWR from 'swr';

export const useUser = (suspense: boolean) => {
return useSWR("Key", () => { return new Promise((resolve) => setTimeout(() => resolve("Hello world"), 2500)) }, { suspense })
}

export const useUserWithSuspense = () => {
return useSWR("Key", () => { return new Promise((resolve) => setTimeout(() => resolve("Hello world"), 2500)) }, { suspense: true })
}

const App = () => {

const { data } = useUser(true);
// ^?

const { data } = useUser(false);
// ^?

const { data } = useUserWithSuspense();
// ^?

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions