内容集合:把 Markdown 变成类型安全的数据
Astro 的 content collections 不只是 glob 一层封装,schema 让每一篇文章在构建期就被校验,写错字段会直接失败。
215 字
getCollection("posts") 返回的不是一堆字符串,而是按 schema 解析过的对象。这意味着 post.data.pubDatetime 在类型上就是 Date,不需要在模板里再转换一次。
const posts = defineCollection({ loader: glob({ pattern: "**/[^_]*.{md,mdx}", base: "./src/content/posts" }), schema: z.object({ title: z.string(), pubDatetime: z.coerce.date(), tags: z.array(z.string()).default([]), }),});为什么值得多写这些
schema 的价值在出错的时候才体现。少写一个 title、把日期写成 2026-13-01、给 tags 传字符串而不是数组,都会在构建期报错,而不是等到页面上出现 undefined。
另一个好处是默认值:z.array(z.string()).default([]) 让没有标签的文章也能正常渲染,模板里不用到处写 post.data.tags ?? []。
一点取舍
内容模型一旦确定,改字段就要改 schema 和所有用到它的地方。小站点上这算不上负担;但如果只是临时放几页静态文字,单独的 Markdown 页面可能更省事。
版权声明
本文由 XiaYe 创作,采用 CC BY-NC-SA 4.0 许可协议;转载请注明出处。
- 作者
- XiaYe
- 发布于
- 许可协议
- CC BY-NC-SA 4.0
分享这篇文章:
相关文章
评论
留下你的想法,或看看别人说了什么。