타입 좁히기는 검사 근거가 실제 값과 함께 움직여야 안전하다

컴파일러가 이해할 수 있는 증거를 순서대로 만들고 검사가 끝난 범위 안에서만 좁힌 타입을 사용한다.

1

unknown 입력

외부 값은 아직 어떤 속성도 믿지 않는다

2

구조 검사

typeof·Array.isArray·in으로 후보를 줄인다

3

구별 필드

kind 같은 literal 필드로 한 변형을 확정한다

4

exhaustive

never로 빠진 후보가 없는지 확인한다

핵심as 단언이나 non-null 단언이 검사를 대신하면 런타임 값과 정적 타입이 갈라진다.