피드로 돌아가기
Type-Safe API Clients in TypeScript Without a Code Generator
Dev.toDev.to
Frontend

Type Cast 제거와 Zod Schema 도입을 통한 Runtime Type Safety 확보

Type-Safe API Clients in TypeScript Without a Code Generator

Pavel Espitia2026년 6월 4일10intermediate

Context

TypeScript의 as Type Assertion이 네트워크 경계에서 실제 데이터 구조를 검증하지 못하는 한계 발생. API 응답 변경 시 런타임 에러가 발생함에도 컴파일 단계에서 이를 감지하지 못해 디버깅 비용이 증가하는 구조적 결함 존재.

Technical Solution

  • Parse, don't validate 원칙 기반의 Runtime Validation 계층 구축
  • Zod Schema를 Single Source of Truth로 설정하여 Runtime 검증과 Static Type(z.infer)을 동기화하는 설계
  • unknown 타입을 입력으로 받아 Schema 검증 후 T 타입으로 변환하는 Generic apiFetch Wrapper 구현
  • Exception 기반 에러 처리 대신 Discriminated Union(Result<T>)을 통한 명시적 에러 핸들링 강제
  • Code Generator 없이 Schema 정의만으로 API Contract 위반 시 즉각적인 Boundary Error 발생 유도

- API 응답에 `as Type` 사용을 금지하고 `unknown` 기반의 검증 로직 도입 검토 - Zod 등의 라이브러리를 활용해 Schema 정의와 Type 추출을 단일화하여 Type Drift 방지 - 에러 발생 가능성이 높은 네트워크 통신 결과값을 `Result` 타입으로 래핑하여 처리 누락 방지 - 대규모 API 스펙이 아닌 경우 Code Generator보다 경량 Schema Wrapper 우선 고려

원문 읽기