未验证 提交 2972c068 编写于 作者: J Joe Haddad 提交者: GitHub

Improve type for GSP return type (#18285)

上级 4782bda3
......@@ -636,7 +636,7 @@ export async function renderToHTML(
throw new Error(invalidKeysMsg('getStaticProps', invalidKeys))
}
if (data.unstable_notFound) {
if ('unstable_notFound' in data && data.unstable_notFound) {
if (pathname === '/404') {
throw new Error(
`The /404 page can not return unstable_notFound in "getStaticProps", please remove it to continue!`
......@@ -649,6 +649,7 @@ export async function renderToHTML(
}
if (
'unstable_redirect' in data &&
data.unstable_redirect &&
typeof data.unstable_redirect === 'object'
) {
......@@ -662,7 +663,7 @@ export async function renderToHTML(
}
if (isDataReq) {
data.props = {
;(data as any).props = {
__N_REDIRECT: data.unstable_redirect.destination,
}
} else {
......@@ -673,7 +674,7 @@ export async function renderToHTML(
if (
(dev || isBuildTimeSSG) &&
!isSerializableProps(pathname, 'getStaticProps', data.props)
!isSerializableProps(pathname, 'getStaticProps', (data as any).props)
) {
// this fn should throw an error instead of ever returning `false`
throw new Error(
......@@ -681,7 +682,7 @@ export async function renderToHTML(
)
}
if (typeof data.revalidate === 'number') {
if ('revalidate' in data && typeof data.revalidate === 'number') {
if (!Number.isInteger(data.revalidate)) {
throw new Error(
`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers, such as '${data.revalidate}', cannot be used.` +
......@@ -702,20 +703,25 @@ export async function renderToHTML(
`\nTo only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!`
)
}
} else if (data.revalidate === true) {
} else if ('revalidate' in data && data.revalidate === true) {
// When enabled, revalidate after 1 second. This value is optimal for
// the most up-to-date page possible, but without a 1-to-1
// request-refresh ratio.
data.revalidate = 1
} else {
// By default, we never revalidate.
data.revalidate = false
;(data as any).revalidate = false
}
props.pageProps = Object.assign({}, props.pageProps, data.props)
props.pageProps = Object.assign(
{},
props.pageProps,
'props' in data ? data.props : undefined
)
// pass up revalidate and props for export
// TODO: change this to a different passing mechanism
;(renderOpts as any).revalidate = data.revalidate
;(renderOpts as any).revalidate =
'revalidate' in data ? data.revalidate : undefined
;(renderOpts as any).pageData = props
}
......
......@@ -85,12 +85,10 @@ export type GetStaticPropsContext<Q extends ParsedUrlQuery = ParsedUrlQuery> = {
locales?: string[]
}
export type GetStaticPropsResult<P> = {
props?: P
revalidate?: number | boolean
unstable_redirect?: Redirect
unstable_notFound?: true
}
export type GetStaticPropsResult<P> =
| { props: P; revalidate?: number | boolean }
| { unstable_redirect: Redirect; revalidate?: number | boolean }
| { unstable_notFound: true }
export type GetStaticProps<
P extends { [key: string]: any } = { [key: string]: any },
......@@ -133,15 +131,9 @@ export type GetServerSidePropsContext<
}
export type GetServerSidePropsResult<P> =
| {
props: P
}
| {
unstable_redirect: Redirect
}
| {
unstable_notFound: true
}
| { props: P }
| { unstable_redirect: Redirect }
| { unstable_notFound: true }
export type GetServerSideProps<
P extends { [key: string]: any } = { [key: string]: any },
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册