Next API를 개발하면서 try-catch문을 적용하던 중 catch
에러 부분에 대한 에러가 신경이 쓰였다.
해당 에러가 신경이 쓰여 error
에 타입을 지정해주었다.
하지만 error는 any
또는 unknown
으로 지정하라고 한다.
이렇게 타입을 따로 지정해주지 않는다면, 나는 error안의 message를 꺼내고 싶은데도 계속해서 message속성이 없다고 칭얼댈 것이다.
try{
throw "error";
throw false;
throw {
message: "error",
code : 400
}
await 어떤API함수호출()
} catch(err){
}
try
문안에서는 여러 타입으로 throw가 될 수 있고, catch는 여러 타입을 받아내야 한다. catch (error: any) {
res.status(400).json({ message: error.message });
}
PASS
catch (error) {
const err = error as TFirebaseAuthError;
res.status(400).json({ message: err.message });
}
as
키워드를 통해 error
를 TFirebaseAuthError
타입이라고 단언해버리는 것이다.as
또한 any
만큼 TS의 의미를 퇴색하게 만든다.catch (error) {
if (error instanceof FirebaseAuthError) {
res.status(400).json({ message: error.message });
} else {
res.status(400).json({ message: "undefined error" });
}
}
instanceof
키워드로 해당 타입이 일치한다면, 그에 응하는 응답을 내려줄 수 있다.instanceof
할 타입은 interface
나 type
이어서는 안된다.
컴파일 과정 이후에 코드가 남느냐
의 문제였다.error instanceof (빈껍데기)
처럼 되버리는 것이다.클래스를 에러객체
로 사용하는 것이다.class CustomError_Class extends Error {
response?: {
data: any;
status: number;
headers: string;
};
}
...
if(error instanceof CustomError_class) {
...
}