Skip to content
Our Sponsors
Open in Anthropic

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 个模块组成:

  1. Eden Treaty (推荐):Eden Treaty 的改进版 RPC 实现
  2. 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 实现。