next.js/test/unit/infer-get-static-props.test.ts
infer-get-static-props.test.ts55 lines1.3 KB
import type { InferGetStaticPropsType, GetStaticPropsContext } from 'next'
import { expectTypeOf } from 'expect-type'

describe('InferGetServerSidePropsType', () => {
  it('should work with sync functions', async () => {
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
    function getStaticProps(context: GetStaticPropsContext) {
      if (context.params?.notFound) {
        return {
          notFound: true,
        }
      }

      return {
        props: {
          foo: 'bar',
        },
      }
    }

    type PageProps = InferGetStaticPropsType<typeof getStaticProps>

    expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>()
  })

  it('should work with async functions', async () => {
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
    async function getStaticProps(context: GetStaticPropsContext) {
      if (context.params?.notFound) {
        return {
          notFound: true,
        }
      }

      if (context.params?.redirect) {
        return {
          redirect: {
            destination: '/',
          },
        }
      }

      return {
        props: {
          foo: 'bar',
        },
      }
    }

    type PageProps = InferGetStaticPropsType<typeof getStaticProps>

    expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>()
  })
})
Quest for Codev2.0.0
/
SIGN IN