title: 端到端类型安全 - ElysiaJS head:
- meta
- property: 'og:title' content: 端到端类型安全 - ElysiaJS
- meta
- name: 'description' content: Elysia 从一开始就通过 Elysia Eden 支持端到端类型安全。端到端类型安全指的是一个系统,其中系统的每个组件都会进行类型一致性检查,意味着只有在数据类型兼容时,数据才会在组件之间传递。
- meta
- property: 'og:description' content: Elysia 从一开始就通过 Elysia Eden 支持端到端类型安全。端到端类型安全指的是一个系统,其中系统的每个组件都会进行类型一致性检查,意味着只有在数据类型兼容时,数据才会在组件之间传递。
端到端类型安全
想象你有一套玩具火车。
火车的每一段轨道都必须像拼图一样,与下一段完美契合。
端到端类型安全就像确保所有轨道片段都正确匹配,这样火车才不会脱轨或卡住。
一个框架具备端到端类型安全,意味着你可以用类型安全的方式连接客户端和服务器。
Elysia 通过一个名为 Eden 的类似 RPC 的连接器,开箱即用地提供了无需代码生成的端到端类型安全。
其他支持端到端类型安全的框架:
- tRPC
- Remix
- SvelteKit
- Nuxt
- TS-Rest
Elysia 允许你在服务器上更改类型,这些更改会立即反映在客户端上,有助于自动补全和类型强制执行。
Eden
Eden 是一个类似 RPC 的客户端,用于连接 Elysia 并实现端到端类型安全,它仅使用 TypeScript 的类型推断而非代码生成。
它可以让你毫不费力地同步客户端和服务器的类型,体积小于 2KB。
Eden 由 2 个模块组成:
- Eden Treaty (推荐):Eden Treaty 的改进版 RPC 实现
- Eden Fetch:具有类型安全的、类似 Fetch 的客户端
以下是每个模块的概述、用例和比较。
Eden Treaty (推荐)
Eden Treaty 是 Elysia 服务器的类对象表示,提供端到端类型安全和显著改善的开发体验。
使用 Eden Treaty,我们可以与 Elysia 服务器进行交互,享受完整的类型支持和自动补全、带有类型缩小的错误处理,并创建类型安全的单元测试。
Eden Treaty 的使用示例:
typescript
import { treaty } from '@elysiajs/eden'
import type { App } from './server'
const app = treaty<App>('localhost:3000')
app.
// 在 '/' 上调用 [GET]
const { data } = await app.get()
// 在 '/nendoroid/:id' 上调用 [PUT]
const { data: nendoroid, error } = await app.nendoroid({ id: 1895 }).put({
name: 'Skadi',
from: 'Arknights'
})Eden Fetch
一个面向偏好 fetch 语法的开发者的、类似 Eden Treaty 的替代方案。
typescript
import { edenFetch } from '@elysiajs/eden'
import type { App } from './server'
const fetch = edenFetch<App>('http://localhost:3000')
const { data } = await fetch('/name/:name', {
method: 'POST',
params: {
name: 'Saori'
},
body: {
branch: 'Arius',
type: 'Striker'
}
})注意
与 Eden Treaty 不同,Eden Fetch 不为 Elysia 服务器提供 WebSocket 实现。