피드로 돌아가기
Dev.toBackend
원문 읽기
의존성 Zero, 번들 크기 87% 감소시킨 Type-Safe 환경 변수 추론 설계
Type-Safe Env Vars Without Zod
AI 요약
Context
TypeScript 프로젝트 내 process.env의 Record<string, string | undefined> 타입으로 인한 런타임 타입 불안정성 발생. Zod 등 스키마 검증 라이브러리를 통한 해결책이 존재하나, 대규모 번들 사이즈 증가라는 오버헤드 수반.
Technical Solution
- Conditional Types를 활용한 Validator 설정 기반의 자동 타입 추론 구조 설계
- .default() 호출 시 non-nullable 타입으로, .optional() 호출 시 nullable 타입으로 분기하는 InferredValue 제네릭 구현
- as const 키워드를 통한 리터럴 타입 보존으로 Union Type 기반의 Exhaustive Checking 지원
- Type-specific 메서드와 Chainable 메서드의 호출 순서를 강제하는 메서드 체이닝 설계로 타입 안정성 확보
- defineSchema와 extendSchema를 통한 스키마 합성과 확장 가능 구조 구현
- 별도의 타입 추출 단계(z.infer) 없이 정의와 동시에 타입이 결정되는 Zero-boilerplate 메커니즘 채택
실천 포인트
1. 환경 변수 정의 시 리터럴 타입 보존을 위해 as const 사용 여부 확인
2. 타입 특화 메서드(url, email)를 체이닝의 전면에 배치하여 타입 소실 방지
3. 번들 크기에 민감한 엣지 환경의 경우 무거운 검증 라이브러리 대신 경량화된 타입 추론 라이브러리 검토