special types

특수 타입 흐름

unknown, object, void, never, null, undefined는 값의 모양보다 사용 가능한 범위와 실행 흐름을 설명할 때 힘을 발휘한다.

상황 선택 타입 안전 기준 피해야 할 해석
외부 입력 API 응답, JSON, 폼 값 unknown 타입 가드로 좁힌 뒤 사용한다. any로 열어두고 바로 속성 접근
객체 구조 특정 속성이 필요함 구체 객체 타입 object보다 `{ name: string }`처럼 모양을 적는다. object만 쓰고 내부 구조를 기대
작업 수행 저장, 로그, 알림 void 호출은 끝나지만 반환값은 사용하지 않는다. undefined 값 반환과 같은 의미로 혼동
복귀 없음 throw, 무한 루프 never 정상 흐름으로 돌아오지 않는 지점을 표시한다. 값이 없다는 뜻의 void로 대체

unknown vs any

guard first

둘 다 어떤 값이든 받을 수 있지만 unknown은 검사 전 사용을 막는다.

unknown: 좁힌 뒤 속성 접근 any: 검사 없이 통과되어 오류를 숨김

object 사용 점검

shape wins

object는 원시 타입이 아님만 말한다. 구체 속성이 필요하면 구조를 직접 적는다.

obj.name은 바로 읽을 수 없다 { name: string }처럼 의도를 드러낸다

void와 never

흐름

void는 함수가 끝까지 오지만 값이 없고, never는 끝까지 도달하지 않는다.

void: 로그, 저장, 알림처럼 부수 효과 never: throw 또는 무한 루프

null과 undefined

strict

strictNullChecks에서는 비어 있을 수 있는 값을 유니온으로 분명히 표시한다.

string에는 null을 바로 넣지 않는다 string | null처럼 가능성을 드러낸다

반환 타입의 실행 흐름

return analysis

void

호출 작업 수행 값 없이 복귀

never

호출 예외 또는 반복 복귀 지점 없음