[Typescript] Using tiny-invariant for narrowing type
2022/3/26 6:25:25
本文主要是介绍[Typescript] Using tiny-invariant for narrowing type,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
import { json } from "remix"; import path from "path"; import fs from "fs/promises"; import parseFrontMatter from "front-matter"; import invariant from "tiny-invariant"; import { marked } from "marked"; export type Post = { slug: string; title: string; html: string; }; export type PostMarkdownAttributes = { title: string; }; type NewPost = { title: string; slug: string; markdown: string; }; function isValidPostAttributes( attributes: any ): attributes is PostMarkdownAttributes { return attributes?.title; } const postsPath = path.join(__dirname, "..", "posts"); export async function getPost(slug: string): Promise<Post> { const filepath = path.join(postsPath, slug + ".md"); const file = await fs.readFile(filepath); const { attributes, body } = parseFrontMatter(file.toString()); invariant( isValidPostAttributes(attributes), `Post ${filepath} is missing attributes` ); const html = marked(body); return { slug, html, title: attributes.title }; }
export const action: ActionFunction = async ({ request }) => { const formData = await request.formData(); await new Promise((res) => setTimeout(res, 1000)); const title = formData.get("title"); const slug = formData.get("slug"); const markdown = formData.get("markdown"); const errors: PostError = {}; if (!title) errors.title = true; if (!slug) errors.slug = true; if (!markdown) errors.markdown = true; if (Object.keys(errors).length) { return json(errors); } invariant(typeof title === "string"); invariant(typeof slug === "string"); invariant(typeof markdown === "string"); await createPost({ title, slug, markdown }); return redirect("/admin"); };
这篇关于[Typescript] Using tiny-invariant for narrowing type的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升