diff options
-rw-r--r-- | .changeset/cool-experts-shake.md | 5 | ||||
-rw-r--r-- | packages/astro/env.d.ts | 13 | ||||
-rw-r--r-- | packages/astro/src/@types/astro.ts | 35 |
3 files changed, 47 insertions, 6 deletions
diff --git a/.changeset/cool-experts-shake.md b/.changeset/cool-experts-shake.md new file mode 100644 index 000000000..f0bbc7e78 --- /dev/null +++ b/.changeset/cool-experts-shake.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Added better types to importing Markdown diff --git a/packages/astro/env.d.ts b/packages/astro/env.d.ts index 54f9b1727..d9dfe741a 100644 --- a/packages/astro/env.d.ts +++ b/packages/astro/env.d.ts @@ -11,3 +11,16 @@ type Astro = import('astro').AstroGlobal; declare const Astro: Readonly<Astro>; declare const Fragment: any; + +declare module '*.md' { + type MD = import('astro').MarkdownInstance<Record<string, any>>; + + export const frontmatter: MD['frontmatter']; + export const file: MD['file']; + export const url: MD['url']; + export const getHeaders: MD['getHeaders']; + export const Content: MD['Content']; + + const load: MD['default']; + export default load; +} diff --git a/packages/astro/src/@types/astro.ts b/packages/astro/src/@types/astro.ts index 3047ae1b2..baf4a22e7 100644 --- a/packages/astro/src/@types/astro.ts +++ b/packages/astro/src/@types/astro.ts @@ -725,7 +725,13 @@ export interface MarkdownInstance<T extends Record<string, any>> { file: string; url: string | undefined; Content: AstroComponentFactory; - getHeaders(): Promise<{ depth: number; slug: string; text: string }[]>; + getHeaders(): Promise<MarkdownHeader[]>; + default: () => Promise<{ + metadata: MarkdownMetadata; + frontmatter: MarkdownContent; + $$metadata: Metadata; + default: AstroComponentFactory; + }>; } export type GetHydrateCallback = () => Promise< @@ -767,19 +773,36 @@ export interface ManifestData { routes: RouteData[]; } +export interface MarkdownHeader { + depth: number; + slug: string; + text: string; +} + +export interface MarkdownMetadata { + headers: MarkdownHeader[]; + source: string; + html: string; +} + export interface MarkdownParserResponse { frontmatter: { [key: string]: any; }; - metadata: { - headers: any[]; - source: string; - html: string; - }; + metadata: MarkdownMetadata; code: string; } /** + * The `content` prop given to a Layout + * https://docs.astro.build/guides/markdown-content/#markdown-layouts + */ +export interface MarkdownContent { + [key: string]: any; + astro: MarkdownMetadata; +} + +/** * paginate() Options * Docs: https://docs.astro.build/guides/pagination/#calling-the-paginate-function */ |