TypeScript
Elysia는 기본적으로 TypeScript를 최우선으로 지원합니다.
대부분의 경우, TypeScript 어노테이션을 수동으로 추가할 필요가 없습니다.
추론
Elysia는 제공한 스키마를 기반으로 요청과 응답의 타입을 추론합니다.
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와 같은 스키마 및 여러분이 선호하는 검증 라이브러리로부터 타입을 자동으로 추론할 수 있습니다:
- Zod
- Valibot
- ArkType
- Effect Schema
- Yup
- Joi
스키마를 타입으로 변환
Elysia가 지원하는 모든 스키마 라이브러리는 TypeScript 타입으로 변환될 수 있습니다.
import { Elysia, t } from 'elysia'
const User = t.Object({
id: t.String(),
name: t.String()
})
type User = typeof User['static']
타입 성능
Elysia는 타입 추론 성능을 염두에 두고 설계되었습니다.
모든 릴리스 전에 로컬 벤치마크를 실행하여 타입 추론이 항상 빠르고 부드러우며, IDE에서 "타입 인스턴스화가 지나치게 깊고 무한할 수 있습니다" 오류를 발생시키지 않도록 보장합니다.
Elysia를 작성하는 대부분의 경우, 타입 성능 문제를 겪지 않을 것입니다.
그러나 문제가 발생하면 다음은 타입 추론이 느려지는 원인을 파악하는 방법입니다:
- 프로젝트 루트로 이동하여 다음을 실행합니다
tsc --generateTrace trace --noEmit --incremental false이렇게 하면 프로젝트 루트에 trace 폴더가 생성됩니다.
- Perfetto UI를 열고
trace/trace.json파일을 드래그합니다

다음과 같은 플레임 그래프가 표시됩니다
그런 다음 평가하는 데 오래 걸리는 청크를 찾아 클릭하면 추론에 걸린 시간, 파일 및 줄 번호가 표시됩니다.
이를 통해 타입 추론의 병목 지점을 식별할 수 있습니다.
Eden
Eden을 사용할 때 느린 타입 추론 문제가 발생하면 Elysia의 하위 앱을 사용하여 타입 추론을 격리할 수 있습니다.
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 type subApp = typeof plugin1 그리고 프론트엔드에서 전체 앱 대신 하위 앱을 가져올 수 있습니다.
import { treaty } from '@elysiajs/eden'
import type { subApp } from 'backend/src'
const api = treaty<subApp>('localhost:3000') 이렇게 하면 전체 앱을 평가할 필요가 없으므로 타입 추론이 빨라집니다.
Eden에 대해 자세히 알아보려면 Eden Treaty를 참조하세요.
