From 503adee706210acbfffb4594605d3ae03dc75989 Mon Sep 17 00:00:00 2001 From: 87xie Date: Sat, 24 Aug 2024 00:35:01 +0800 Subject: [PATCH] [v3] add a generic for `themeConfig` to improve type inference --- .changeset/poor-rings-shop.md | 7 +++++++ packages/nextra-theme-blog/src/index.tsx | 4 ++-- packages/nextra/src/types.ts | 9 ++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 .changeset/poor-rings-shop.md diff --git a/.changeset/poor-rings-shop.md b/.changeset/poor-rings-shop.md new file mode 100644 index 0000000000..d4bc66214b --- /dev/null +++ b/.changeset/poor-rings-shop.md @@ -0,0 +1,7 @@ +--- +'nextra-theme-blog': patch +'nextra-theme-docs': patch +'nextra': patch +--- + +Add a generic for `themeConfig` in `NextraThemeLayoutProps` to improve type inference. diff --git a/packages/nextra-theme-blog/src/index.tsx b/packages/nextra-theme-blog/src/index.tsx index fc3422e98b..86b0ee1f56 100644 --- a/packages/nextra-theme-blog/src/index.tsx +++ b/packages/nextra-theme-blog/src/index.tsx @@ -9,7 +9,7 @@ import { components, HeadingContext } from './mdx-theme' import Meta from './meta' import Nav from './nav' import { PostsLayout } from './posts-layout' -import type { BlogFrontMatter } from './types' +import type { BlogFrontMatter, NextraBlogTheme } from './types' import { isValidDate } from './utils/date' const layoutSet = new Set(['post', 'page', 'posts', 'tag']) @@ -18,7 +18,7 @@ export default function NextraLayout({ children, pageOpts, themeConfig -}: NextraThemeLayoutProps) { +}: NextraThemeLayoutProps) { const config = { ...DEFAULT_THEME, ...themeConfig } const ref = useRef(null) diff --git a/packages/nextra/src/types.ts b/packages/nextra/src/types.ts index 40476a82fa..bd747d14b7 100644 --- a/packages/nextra/src/types.ts +++ b/packages/nextra/src/types.ts @@ -93,10 +93,13 @@ export type Nextra = ( export type ThemeConfig = any | null -export type NextraThemeLayoutProps = { - pageOpts: PageOpts +export type NextraThemeLayoutProps< + TFrontMatter = FrontMatter, + TThemeConfig = ThemeConfig +> = { + pageOpts: PageOpts pageProps: any - themeConfig: ThemeConfig + themeConfig: TThemeConfig children: ReactNode }