| import type { |
| InferGetServerSidePropsType, |
| GetServerSidePropsContext, |
| } from 'next' |
| import { expectTypeOf } from 'expect-type' |
|
|
| describe('InferGetServerSidePropsType', () => { |
| it('should work with sync functions', async () => { |
| |
| function getServerSideProps(context: GetServerSidePropsContext) { |
| if (context.params?.notFound) { |
| return { |
| notFound: true, |
| } |
| } |
|
|
| return { |
| props: { |
| foo: 'bar', |
| }, |
| } |
| } |
|
|
| type PageProps = InferGetServerSidePropsType<typeof getServerSideProps> |
|
|
| expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>() |
| }) |
|
|
| it('should work with async functions', async () => { |
| |
| async function getServerSideProps(context: GetServerSidePropsContext) { |
| if (context.params?.notFound) { |
| return { |
| notFound: true, |
| } |
| } |
|
|
| if (context.params?.redirect) { |
| return { |
| redirect: { |
| destination: '/', |
| }, |
| } |
| } |
|
|
| return { |
| props: { |
| foo: 'bar', |
| }, |
| } |
| } |
|
|
| type PageProps = InferGetServerSidePropsType<typeof getServerSideProps> |
|
|
| expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>() |
| }) |
|
|
| it('should work with promised props', async () => { |
| |
| async function getServerSideProps() { |
| return { |
| props: Promise.resolve({ |
| foo: 'bar', |
| }), |
| } |
| } |
|
|
| type PageProps = InferGetServerSidePropsType<typeof getServerSideProps> |
|
|
| expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>() |
| }) |
| }) |
|
|