ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Vista.js 类型安全 API(vstack)完整教程:端到端类型推导,告别手写接口

Vista.js 类型安全 API(vstack)完整教程:端到端类型推导,告别手写接口 Vista.js 类型安全 APIvstack完整教程端到端类型推导告别手写接口【免费下载链接】vista项目地址: https://gitcode.com/gh_mirrors/vista13/vistaVista.js 类型安全 APIvstack让前端和后端的接口契约由 TypeScript 自动推导你在服务端声明一次输入与输出结构客户端就自动获得参数提示、返回值类型和错误类型彻底告别手写接口类型、拼写 URL 和手动维护文档。本教程面向新手带你快速掌握 vstack 的完整使用流程。为什么还需要类型安全 API传统 REST 开发中前后端类型靠人肉同步痛点手写接口的现状vstack 的方式类型维护前端手抄一份 TS 类型从 Router 自动推导参数校验服务端逐字段判断inputSchema 自动校验返回值any满天飞output精确推导路径错误拼错 URL 运行期才炸编译期直接报错vstack 的核心思路很简单服务端 Router 就是唯一事实来源Single Source of Truth客户端类型全部由它推导而来。三步启用 vstack 类型安全 API第一步打开 Typed API 实验开关在vista.config.ts中启用typedApi并指定序列化方式与请求体大小上限// vista.config.ts export default { experimental: { typedApi: { enabled: true, serialization: json, // 也支持 superjson可序列化 Date 等类型 bodySizeLimitBytes: 1024 * 1024, }, }, };第二步编写 Procedure接口单元每个接口由vstack.procedure构建链式声明输入、输出和处理逻辑类型会逐级推导const v vstack.init(); const echo v.procedure .input({ parse: (value) ({ text: String(value?.text ?? ) }) }) .query(({ input }) ({ text: input.text }));input的 Schema 决定参数类型queryGET/mutationPOST的返回值决定输出类型中间无需任何手动标注。第三步组装 Router 并暴露入口const router v.router({ ping: v.procedure.query(() ({ ok: true })), echo, }); export default router; // app/api/typed.ts 中导出嵌套对象会被自动展平成路由路径重复路径会在启动时直接报错避免线上才发现问题。客户端调用路径与类型全部自动推导客户端通过createVistaClient获得一个知道所有路由的对象import { createVistaClient } from vista/stack/client; const client createVistaClienttypeof router({ baseUrl: /api }); // 路径写错、方法用错、参数不对 —— 编译期全部报错 const data await client.$get(/echo, { text: hi }); // data 自动推导为 { text: string }方法用途类型行为client.$get(path, input?)调用 GET 路由只接受 GET 路径返回精确类型client.$post(path, input)调用 POST 路由只接受 POST 路径校验必填参数client.$url(path, input?)生成带参数的 URL 字符串用于跳转、预取等场景服务端直接调用createCaller 免 HTTP在 Server Component 或测试中可以用createCaller跳过网络直接调用 Router且函数签名与路由结构一一对应caller.echo({ text })同样享受完整类型推导。它的实现位于 caller.ts。常见错误与排查400 输入校验失败inputSchema 的parse抛错即返回 400先检查请求参数是否与 Schema 一致500 输出校验失败output校验不通过会抛出StackOutputValidationError见 executor.ts401 被中间件拦截通过v.procedure.use(middleware)挂载的中间件可提前返回响应见 procedure.ts客户端找不到路由类型确认typeof router来自导出的 Router 变量推导逻辑见 client/types.ts延伸阅读与源码索引官方快速上手typed-api-quickstart.mdAPI Routes 与 Typed API 的区别api-routes-vs-typed-api.mdvstack 入口实现index.tsRouter 构建与路由展平router.ts类型安全客户端create-client.ts可运行的完整示例test-vstack.cjs模板中的入口文件template-typed/app/api/typed.ts 小结vstack 用一次声明、处处推导替代了手写的接口层——服务端写 Schema客户端拿类型中间件管权限createCaller连 HTTP 都能省。把接口定义从两份文档收敛成一份代码这就是端到端类型安全的全部秘密。【免费下载链接】vista项目地址: https://gitcode.com/gh_mirrors/vista13/vista创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表