summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.changeset/cool-experts-shake.md5
-rw-r--r--packages/astro/env.d.ts13
-rw-r--r--packages/astro/src/@types/astro.ts35
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
*/