유니온 타입은 조건문을 지나며 블록마다 더 구체적인 타입으로 좁혀진다. 그래서 검사 이후에는 해당 타입에만 있는 멤버를 안전하게 사용할 수 있다.
검사 전에는 공통 멤버만, 검사 후에는 좁혀진 타입의 멤버까지 사용할 수 있다.
아직 실제 값이 문자열인지 숫자인지 확정되지 않았다.
typeof id === "string"
참이면 `id`는 `string`으로 좁혀진다.
else
`string` 가능성이 제거되어 남은 타입은 `number`다.
user is AdminUser처럼
타입 사실을 전달한다.
id.toUpperCase() 사용
가능
id.toFixed(2) 사용 가능
분기 밖에서는 선언된 범위의 타입으로 다시 합쳐진다.