Skip to content

[typescript] try catch 에서 error type 은 ?

Published: at 01:00 AM

개인적으로 타입스크립트를 쓰면서 이상한 것 중의 하나가 try catch 에서 error 타입이다. 에러이니깐 당연히 Error 타입이 되어야 한다고 생각했으나 typescript 버전에 따라서 예전에는 any, 최근에는 unknown 타입이다.

왜 그럴까 ?

try {
} catch (error: ?) {
  // handle Error
}

throw

일반적으로 throw 를 통해서 error 을 전달하지만 javascript 에서는 throw 에는 모든 타입을 다 사용할 수 있다고 합니다.

throw "This is error!";
throw 4;
throw { type: "error", message: "This is error!" };
throw null;
throw new Promise(() => {});
throw undefined;

이렇게 throw 를 통해서 어떤 타입이라도 전달할 수 있기 때문에 catcherror 가 어떤 타입이 되는지 알 수 없습니다.

Error 타입으로 제한하기

어떤 타입인지 명확하지 않기 때문에 모든 타입을 받을 수 있는 unknown 을 받은 다음에 unknown 사용법에 따라서 각 개별 타입에 대해서 타입 내로잉 type narrowing 해서 구체화해서 사용을 해야합니다.

try {

} catch (error: unknown) {
  // type narrowing
  if (error instanceof Error) {
    // handle Error
    console.log(error.message)
  } else if (typeof error === 'string') {
    // handle string
    console.log(error);
  } else {
    // handle other error
    ...
  }
}

Reference