網站搜尋

reactjs - 我如何在 Next.js 的 _app.tsx 中使用 Typescript 為 Component 添加一個新屬性?


我正在使用 Next.js、NextAuth.js 和 Typescript 開發一些受保護的頁面。下面這段來自我的 _app.tsx 的程式碼是從 NextAuth.js 官方網站取得的,但其中包含了一個 auth 屬性,而 Component 並不存在該屬性,其類型為 var Component: NextComponentType<NextPageContext, any, {}>,因此 TS 對此顯示錯誤:

function MyApp({ Component, pageProps: { session, ...pageProps } }: AppProps) {
  return (
    <>
      <SessionProvider session={session}>
        {Component.auth ? (
          <Auth>
            <Component {...pageProps} />
          </Auth>
        ) : (
          <Component {...pageProps} />
        )}
      </SessionProvider>
    </>
  );
}

我不是 TypeScript 專家,所以我的問題是我該如何在 TypeScript 中向 Component 添加/擴展 auth 屬性?

答案#1

你需要擴展 AppProp 並添加你的自定義屬性

import type { NextComponentType  } from 'next' //Import Component type

//Add custom appProp type then use union to add it
type CustomAppProps = AppProps & {
  Component: NextComponentType & {auth?: boolean} // add auth type
}

function MyApp({ Component, pageProps: { session, ...pageProps } }: CustomAppProps) {
...
}