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 时你不会遇到任何类型性能问题。
然而,如果遇到了,可以按以下方法定位导致类型推断缓慢的原因:
- 导航到你的项目根目录并运行
tsc --generateTrace trace --noEmit --incremental false这应该会在你的项目根目录下生成一个 trace 文件夹。
- 打开 Perfetto UI 并拖入
trace/trace.json文件

它应该会向你展示类似这样的火焰图
然后你可以找到耗时较长的评估块,点击它,它应该会显示推断耗时,以及它来自哪个文件和行号。
这应该能帮助你识别类型推断的瓶颈。
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 的更多信息。