TypeScript React Pattern

고급 타입 패턴으로 막는 불가능한 UI 상태

discriminated union, generic component, satisfies, as const를 사용하면 런타임 분기보다 먼저 잘못된 UI 조합을 줄일 수 있다.

01

상태 열거

loading, error, empty, success에서 허용되는 필드를 각각 적는다.

state model
02

판별자 지정

status나 kind 같은 고정 필드로 타입 좁히기 기준을 만든다.

discriminator
03

Generic 보존

컴포넌트가 받은 item 타입을 onSelect와 renderItem까지 잃지 않게 연결한다.

T flows
04

값 검증

설정 객체는 satisfies로 shape를 검증하되 literal 타입을 유지한다.

config safety
UI 상태
data와 error가 동시에 있는 상태를 타입에서 금지한다. 분기가 줄고 fallback 누락을 컴파일 단계에서 잡는다.
exclusive state
Generic UI
재사용 컴포넌트는 item 타입을 any로 잃지 않아야 한다. key, label, onSelect의 타입 관계가 유지된다.
typed reuse
Literal
as const와 satisfies를 함께 쓰면 설정 값 기반 union을 만들 수 있다. 문자열 오타를 런타임 전에 잡는다.
config as type

고급 패턴 적용선

단순성 복잡한 타입이 실제 버그를 막는지 확인한다.
에러 메시지 팀원이 타입 오류를 읽고 수정할 수 있는 수준이다.
런타임 검증 외부 입력은 타입만 믿지 않고 스키마 검증도 거친다.

불가능 상태 제거

type LoadState<T> =
  | { status: "loading" }
  | { status: "error"; message: string }
  | { status: "success"; data: T };