#7PredictabilityEasy

Inconsistent Returns → Discriminated Union

Inconsistent Returns — 동일 의도, 동일 모양

세 개의 validate 함수가 서로 다른 모양으로 결과를 반환합니다. 호출하는 사람이 매번 "이번엔 boolean 인가? string 인가? object 인가?" 를 추측해야 합니다.

통일된 반환 타입

type ValidationResult =
  | { isValid: true }
  | { isValid: false; message: string };

할 일

  1. validateEmail, validatePassword, validateUsername 셋 다 ValidationResult 타입을 반환하도록 통일
  2. 의미는 보존:
    • validateEmail(''){ isValid: false, message: 'Email is required' }
    • validateEmail('foo'){ isValid: false, message: 'Invalid email format' } (@ 없음)
    • validateEmail('a@b'){ isValid: true }
    • validatePassword('short'){ isValid: false, message: 'Too short' } (8자 미만)
    • validatePassword('longenough'){ isValid: true }
    • validateUsername(''){ isValid: false, message: ... } (메시지 내용은 자유)
    • validateUsername('alice'){ isValid: true }

학습 포인트

  • Discriminated union 으로 "성공/실패" 분기를 타입 안전하게 표현
  • 같은 의도(검증)에는 같은 모양 — 호출자가 분기 처리를 한 번만 짜면 됨
Sandpack 로드 중…