4.4 버전이후로 try catch 블록의 e가 unknown이 되서 컴파일러가 오류를 뱉는다.
0. unknown으로 지정된 타입은 개발자가 조치를 취해준 뒤 사용해야 한다.
1. 간단한 해결책은 e를 any로 타이핑해준다.
2. 새로운 에러 타입을 만들고 as로 assertion 해준다.
3. instanceof 연산자로 타입가드를 설정한다.
type ResultType = [boolean, string];
const doSomething = (): ResultType => {
try {
throw new Error('Some error occurs...');
} catch (e) {
return [false, e.message];
}
};
// 1번 해결
const doSomething = (): ResultType => {
try {
throw new Error('Some error occurs...');
} catch (e:any) {
return [false, e.message];
}
};
interface myError extends Error {
code: string;
message: string;
}
// 2번 해결
const doSomething = (): ResultType => {
try {
throw new Error('Some error occurs...');
} catch (e) {
const err = e as myError; // 커스텀에러를 정의해서 err객체를 변수에 넣고 그 변수를 반복해서 사용하면 unknown 에러를 방지할 수 있다.
return [false, err.message];
}
};
// 3번 해결
const doSomething = (): ResultType => {
try {
throw new Error('Some error occurs...');
} catch (e) {
if (e instanceof Error) {
return [false, err.message];
}
return [false, 'not specified error'];
}
};
https://velog.io/@devstefancho/typescript-Object-is-of-type-unknown.ts2571-error-object