Skip to content
Our Sponsors
Open in Anthropic

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와 같은 스키마 및 여러분이 선호하는 검증 라이브러리로부터 타입을 자동으로 추론할 수 있습니다:

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

스키마를 타입으로 변환 ​

Elysia가 지원하는 모든 스키마 라이브러리는 TypeScript 타입으로 변환될 수 있습니다.

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


타입 성능 ​

Elysia는 타입 추론 성능을 염두에 두고 설계되었습니다.

모든 릴리스 전에 로컬 벤치마크를 실행하여 타입 추론이 항상 빠르고 부드러우며, 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 type subApp = typeof plugin1 

그리고 프론트엔드에서 전체 앱 대신 하위 앱을 가져올 수 있습니다.

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

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

이렇게 하면 전체 앱을 평가할 필요가 없으므로 타입 추론이 빨라집니다.

Eden에 대해 자세히 알아보려면 Eden Treaty를 참조하세요.