Skip to content
Our Sponsors
Open in Anthropic

title: TypeScript - ElysiaJS head: - - meta - property: 'og:title' content: TypeScript - ElysiaJS

- - meta
  - name: 'description'
    content: TypeScript 在 Elysia 中拥有一流支持。学习如何利用 TypeScript 强大的类型系统,结合 Elysia 直观的 API、基于模式的验证以及调试类型推断性能问题。

- - meta
  - property: 'og:description'
    content: TypeScript 在 Elysia 中拥有一流支持。学习如何利用 TypeScript 强大的类型系统,结合 Elysia 直观的 API、基于模式的验证以及调试类型推断性能问题。

TypeScript

Elysia 对 TypeScript 提供开箱即用的一流支持。

大多数情况下,你无需手动添加任何 TypeScript 注解。

推断

Elysia 根据你提供的模式来推断请求和响应的类型。

ts
import { 
Elysia
,
t
} from 'elysia'
import {
z
} from 'zod'
const
app
= new
Elysia
()
.
post
('/user/:id', ({
body
}) =>
body
, {
body
:
t
.
Object
({
id
:
t
.
String
()
}),
query
:
z
.
object
({
name
:
z
.
string
()
}) })

Elysia 可以自动从 TypeBox 等 schema 以及你喜欢的验证库推断类型,例如:

  • Zod
  • Valibot
  • ArkType
  • Effect Schema
  • Yup
  • Joi

Schema 到类型

所有 Elysia 支持的 schema 库都可以转换为 TypeScript 类型。

ts
import { 
Elysia
,
t
} from 'elysia'
const
User
=
t
.
Object
({
id
:
t
.
String
(),
name
:
t
.
String
()
}) type
User
= typeof
User
['static']


类型性能

Elysia 在构建时就考虑了类型推断的性能。

在每次发布前,我们都会进行本地基准测试,以确保类型推断始终保持快速、流畅,并且不会因“Type instantiation is excessively deep and possibly infinite”错误导致你的 IDE 崩溃。

大多数情况下,使用 Elysia 时你不会遇到任何类型性能问题。

然而,如果遇到了,可以按以下方法定位导致类型推断缓慢的原因:

  1. 导航到你的项目根目录并运行
tsc --generateTrace trace --noEmit --incremental false

这应该会在你的项目根目录下生成一个 trace 文件夹。

  1. 打开 Perfetto UI 并拖入 trace/trace.json 文件

Perfetto

它应该会向你展示类似这样的火焰图

然后你可以找到耗时较长的评估块,点击它,它应该会显示推断耗时,以及它来自哪个文件和行号。

这应该能帮助你识别类型推断的瓶颈。

Eden

如果在使用 Eden 时遇到类型推断缓慢的问题,可以尝试使用 Elysia 的子应用来隔离类型推断。

ts
import { Elysia } from 'elysia'
import { plugin1, plugin2, plugin3 } from from './plugin'

const app = new Elysia()
	.use([plugin1, plugin2, plugin3])
  	.listen(3000)

export type app = typeof app

// Export sub app
export type subApp = typeof plugin1 

在你的前端,你可以导入子应用而不是整个应用。

ts
import { treaty } from '@elysiajs/eden'
import type { subApp } from 'backend/src'

const api = treaty<subApp>('localhost:3000') 

这应该能让你的类型推断更快,因为它不需要评估整个应用。

查看 Eden Treaty 以了解关于 Eden 的更多信息。