Ale*_*iva 25 typescript reactjs next.js next-auth
我在 NextJs 项目上使用 NextAuth,但收到错误"Type error: Property 'session' does not exist on type '{}'."。session我按照此处的建议将该属性添加到我的 _app.tsx 中:
https://next-auth.js.org/getting-started/example
我还将该属性添加到了我的自定义MyApp类型接口中,但仍然收到错误。按照我的代码:
import { NextComponentType } from "next";
import { Session } from "next-auth";
export interface CustomAppProps extends AppProps {
Component: NextComponentType & { auth?: boolean; session?: Session };
}
function MyApp({ Component, pageProps: { session, ...pageProps } }: CustomAppProps) {
//...
});
Run Code Online (Sandbox Code Playgroud)
我该如何修复它?谢谢!
编辑#1(添加MyApp我当前的代码):
function MyApp({ Component, pageProps: { session, ...pageProps } }: CustomAppProps) {
return (
<>
<CookieConsentProvider useCookieConsentHooksOptions={{ consentCookieAttributes: { expires: 360 } }}>
<SessionProvider session={session}>
<AppContextProvider>
<Component {...pageProps} />
</AppContextProvider>
</SessionProvider>
</CookieConsentProvider>
</>
);
}
Run Code Online (Sandbox Code Playgroud)
编辑#2:
function MyApp({ Component, pageProps }: AppProps) {
return (
<>
<CookieConsentProvider useCookieConsentHooksOptions={{ consentCookieAttributes: { expires: 360 } }}>
<SessionProvider session={pageProps.session}>
<AppContextProvider>
<Component {...pageProps} />
</AppContextProvider>
</SessionProvider>
</CookieConsentProvider>
</>
);
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我仍然收到 TS 错误:
小智 85
在最新版本的 next.js v12.3.0` 中,https://github.com/vercel/next.js/releases#: ~:text=Compare-,v12.3.0, -Latest ,
AppProps 接口采用 pageProps 的泛型,如该合并 PR 的详细信息所示 ( https://github.com/vercel/next.js/pull/38867 )
我遇到了同样的问题,并通过将会话类型传递给 AppProps 泛型来解决它。
注意:在这种情况下,无需为类型声明定义新的自定义文件。
import { Session } from "next-auth";
import { SessionProvider } from "next-auth/react";
import type { AppProps } from "next/app";
function MyApp({
Component,
pageProps,
}: AppProps<{
session: Session;
}>) {
return (
<SessionProvider session={pageProps.session}>
<Component {...pageProps} />
</SessionProvider>
);
}
export default MyApp;
Run Code Online (Sandbox Code Playgroud)
我设法通过向我的项目添加自定义类型文件来修复该错误,正如我在 NexthAuth.js Github 存储库上看到的那样: https: //github.com/nextauthjs/next-auth-typescript-example/blob/main/types/下一个.d.ts。
import type { NextComponentType, NextPageContext } from "next"
import type { Session } from "next-auth"
import type { Router } from "next/router"
declare module "next/app" {
type AppProps<P = Record<string, unknown>> = {
Component: NextComponentType<NextPageContext, any, P>
router: Router
__N_SSG?: boolean
__N_SSP?: boolean
pageProps: P & {
/** Initial session passed in from `getServerSideProps` or `getInitialProps` */
session?: Session
}
}
}
Run Code Online (Sandbox Code Playgroud)
只是将其复制到我的项目中,现在就可以了。不知道为什么它曾经有效,因为我以前从未有过。
| 归档时间: |
|
| 查看次数: |
20252 次 |
| 最近记录: |