I'm loading data using useSWR and specified the type as a custom interface called MyInterface. I also set fallbackData equal to a default object of type MyInterface. However, TypeScript is asserting that the return type of my data is MyInterface | undefined. How can I make it so that the useSWR does not return an undefined data type, but only a type of MyInterface?
const { data } = useSWR<MyInterface>(
'myendpoint',
fetcher,
{
fallbackData: {}
}
);
CodePudding user response:
The useSWR return type states that data may be undefined:
export interface SWRResponse<Data, Error> {
data?: Data;
error?: Error;
revalidate: () => Promise<boolean>;
mutate: (data?: Data | Promise<Data> | MutatorCallback<Data>, shouldRevalidate?: boolean) => Promise<Data | undefined>;
isValidating: boolean;
}
Use a type guard to ensure that your data is not undefined:
const { data } = useSWR<MyInterface>(
'myendpoint',
fetcher,
);
if(!data) return null;
// type of data here is always MyInterface
CodePudding user response:
You will always have the option that you won't get data back. Just declare it as MyInterface | undefined and when you want to use it make sure your data is defined
