공부중/Error

[TypeScript] 'error' is of type 'unknown'.ts

디마코 2022. 12. 19.

💥문제 상황 

에러 발생

NestJS 강의를 듣던 중, try... catch... 문을 작성하는데 'error' is of type 'unknown'이라는 에러를 만났다. 

관련해서 정보를 찾아보니 타입스크립트 4.3.x 버전까지는 catch절 속성이 any로 설정되어 쉽게 액세스 할 수 있도록 되어있었으나, 그 이상의 버전에서는 속성이 변경되었기 때문에 최신 버전 타입 스크립트에서 발생하는 오류라고 한다. 


🛠️해결 방법

1. 타입 변경 

가장 쉽게 변경이 가능한 방법은 error의 타입을 변경하는 것이다. 

// 방법 1. 타입스크립트 버전 4.0 이전처럼 error에 any 속성 지정

try{
	// try 로직
}catch (error: any) {
	// catch 로직
    console.log(error.message);
}

// 방법 2. error에 unknown 속성 지정 

try{
	// try 로직
}catch (error: unknown) {
	// catch 로직
    console.log(error.message);
}

error에 any 또는 unknown 속성을 지정해서 작성하면 해결되는데, 열심히 구글링 해 본 결과 any보다는 unknown으로 지정해서 사용하는걸 권장하고 있다. unknown은 무조건 타입을 좁혀사 사용해야 하고 any는 그렇지 않아 자유롭다는 차이가 있어서 unknown을 사용하는게 더 안전하다고 함!

(맨 아래 참고 페이지에서 더 자세한 내용을 확인할 수 있다. 읽어보면 좋아요👍)

 

2. 타입스크립트 사용 버전 낮추기 

vscode에서 현재 사용 중인 타입 스크립트 버전 정보를 확인하고 그 버전을 낮출 수 있다. 

위 아래 사진은 같은 내용!

vscode에서 F1 키를 눌러 나오는 검색창에서 Typescript: Select Typescript Version을 검색하여 클릭하거나, vscode 하단의 TypeScript 쪽에 마우스를 가져다 대면 현재 버전이 4.9.4라고 나오고 옆에 select version을 눌러 버전을 바꿀 수 있다.

➡️4.3xx 버전으로 바꾸면 해결되지만, 굳이 구버전으로 바꿔서 해결하는 건 좋은 방법은 아닌듯하다. 


👀후기

내가 직접 적용해본 해결방법은 위의 2가지 이다. 열심히 구글링 해본결과 오류를 정규화하는 보조 함수를 만든다거나 하는 방법도 있고 하더라. 그 방법은 잘 이해가 되지 않았기 때문에 앞으로도 1번 방법을 위주로 쓸 듯. 관련 오류를 겪는다면, 아래 참고자료 중 2번째 링크가 1번 해결방법에 대한 자세한 설명이 있으니 참고하면 좋을 것 같다 😁

 

참고 자료)

https://stackoverflow.com/questions/68240884/error-object-inside-catch-is-of-type-unknown

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#unknown-on-catch-clause-bindings

https://www.youtube.com/watch?v=JyBvFey7pVc 

 

댓글