SPECIAL TYPES

TypeScript 특수 타입

any, unknown, never, void, null, undefined를 한 묶음으로 외우면 실제 코드에서 위험하다. any는 검사를 끄고, unknown은 좁히기를 요구하며, never는 도달 불가나 불가능한 분기를 표현하고, void는 반환값을 쓰지 않는 계약을 나타낸다.

01

외부 입력 받기

JSON, postMessage, 사용자 입력처럼 모양이 불확실하면 unknown으로 받고 검증한다.

바로 any로 풀지 않는다
02

좁히기 수행

typeof, in, Array.isArray, schema validator로 unknown을 실제 타입으로 좁힌다.

검증 전 속성 접근은 불가능해야 안전하다
03

불가능 분기 표시

switch에서 모든 union case를 처리했는지 never로 확인한다.

새 case 추가 시 컴파일 오류를 만든다
04

반환 계약 정리

값을 반환하지 않는 함수는 void, 절대 돌아오지 않는 함수는 never로 의미를 나눈다.

throw 함수와 log 함수는 다르다
05

nullish 처리

null과 undefined 허용 여부를 strictNullChecks 기준으로 명확히 한다.

옵션 속성과 null 값은 다르다
any
검사 해제 마이그레이션이나 임시 경계에만 제한적으로 사용하고 근거를 남긴다.
전파되면 타입 안전성이 무너진다
unknown
안전한 미지 타입 사용 전에 좁히기를 강제해 외부 입력 처리에 적합하다.
검증 함수와 함께 쓴다
never
불가능 상태 도달할 수 없는 코드, exhaustive switch, 항상 throw 함수에 쓰인다.
union 누락을 잡는다
void
반환값 사용 안 함 함수가 의미 있는 값을 돌려주지 않는다는 호출 계약이다.
undefined 값과 완전히 같은 개념은 아니다

타입 확인

any 전파 any가 함수 반환 타입이나 공용 타입으로 퍼지지 않는지 확인한다.
unknown 검증 외부 입력을 사용하기 전에 좁히기나 schema 검증을 거치는지 본다.
never 체크 union switch에서 누락 case가 컴파일 오류로 드러나는지 확인한다.