"잡힌 값이 언제나 Error라는 보장은 없어. 먼저 무엇인지 확인하고, 그다음 처리해."
catch 변수는 왜 unknown인가
JavaScript에서는 throw 'oops'처럼 어떤 값이든 던질 수 있어. 그래서 useUnknownInCatchVariables가 켜진 catch (error)의 타입은 unknown이야. 곧바로 error.message를 읽지 말고 error instanceof Error 같은 좁히기를 거쳐야 해.
외부 라이브러리가 고유 오류 클래스를 제공한다면 그 클래스나 판별 가능한 속성을 확인할 수 있어. 단순한 타입 단언으로 Error라고 우기면 실제로 문자열이나 응답 객체가 왔을 때 또 다른 오류를 만들 뿐이야.
사용자 오류 클래스는 좁히기 정보를 더해
오류를 던질 때는 class NetworkError extends Error처럼 Error를 확장하고 상태 코드 같은 필드를 선언해. catch에서 instanceof NetworkError로 좁히면 스택과 메시지를 유지하면서 그 필드에도 안전하게 접근할 수 있어.
오류 처리는
catch 문법이 아니라 책임의 경계를 정하는 일이야. unknown에서 안전하게 좁히고, 이 계층이 실제로 복구할 수 있는 것만 처리해.