1. Narrowing vs. Assertion vs. Casting 차이점

개념 설명 실행 방식 주의점
Narrowing 타입 가드를 사용해 특정 타입으로 좁혀가는 과정 런타임에서 타입 체크 후 실행 자동으로 타입이 결정됨
Assertion 개발자가 "이 타입이 맞다"라고 선언 강제 변환 (as) 잘못된 경우 런타임 오류 발생 가능
Casting 한 타입을 다른 타입으로 변환 명시적 변환 (Number(x), String(y)) 변환 불가능한 값은 오류 발

🚨 void vs never 차이점

구분 void never
의미 값을 반환하지 않음 절대 반환되지 않음
정상 종료 가능 여부 ✅ 가능 ❌ 불가능 (예외 발생 또는 무한 루프)
사용 예제 console.log(), return; 함수 throw, while (true)

function doSomething(): void {
  console.log("작업 수행"); // 정상적으로 종료됨 (void 사용 가능)
}

function throwError(): never {
  throw new Error("절대 실행 종료되지 않음"); // 실행 중 예외 발생
}