Skip to content

unsafe assignment of an any value라는 오류가 생겼어요

Seogeurim edited this page Nov 29, 2021 · 5 revisions
  • 작성자: @Yunseo Hwang
  • 작성일: 2021.11.01
  • Description: eslint에서 "unsafe assignment of an any value"라는 오류를 발견하고 해당 오류를 해결하기까지의 방법을 적어봤습니다.

Untitled

별 거 아닌 한 줄인데 "unsafe assignment of an any value"라는 ESLint 오류를 만났습니다. 분명히 @types/jsonwebtoken 패키지도 설치해주면서 type도 존재하고 마우스를 find 함수 위에 올렸을 때 Algorithm | undefined로 잘 나왔기 때문에 오류 메시지에서 any로 인해 오류가 났다는 것을 이해할 수 없었습니다.

검색을 아무리해도 원인과 해결 방법을 찾을 수 없었습니다... 아무리 생각해도 문제가 없는 데...

Untitled

우선 당장의 원인 파악보다는 코드에서 에러를 없애는 게 급했기에 이것 먼저 Try 하기로 했습니다. 에러 메시지가 any 타입의 값을 할당해서 unsafe하다는 내용이었으니까 타입에 대한 내용을 할당 부분에서 빼고 반환할 때 타입 변환을 해주는 방식으로 코드를 수정하니까 해결이 되었습니다.

... 정확히는 해결이 되었다고 생각했습니다.

Untitled

그러자 이번에는 해당 함수를 호출하여 반환한 값을 할당할 때 문제가 생겼습니다. 이번에도 "unsafe assignment of an any value" 오류 였습니다. 해당 부분은 정말 어떻게 해도 에러를 없앨 수 없었기 때문에 시간이 오래 걸리더라도 어떻게든 원인을 파악해보겠다고 결심했습니다.

진짜 너무너무 이상해서 먼저 에러가 난 코드와 비슷한 로직의 테스트용 코드를 작성해봤습니다.

type Test = '123' | '456' | 'none';
const testArray: Test[] = ['123', '456', 'none'];
const result = testArray.find(t => t === '456');
console.log(result);

전혀 오류가 발생하지 않았습니다. 아래의 코드와 거의 유사함에도 위 코드는 에러가 발생하지 않았고 아래의 코드는 에러가 발생했습니다.

const jwtAlgorithms: Algorithm[] = [
    'HS256',
    'HS384',
    'HS512',
    'RS256',
    'RS384',
    'RS512',
    'ES256',
    'ES384',
    'ES512',
    'PS256',
    'PS384',
    'PS512',
    'none',
  ];
const jwtAlgorithm = jwtAlgorithms.find(jwtAlgo => jwtAlgo === algorithm) || 'none';

여기서 문제의 원인을 발견하게 되었습니다. 위 코드와 아래의 코드 차이점은 Algorithm이라는 외부 타입을 사용하고 있다는 것이었으며 전체 코드에서 외부 타입(@types/jsonwebtoke)을 사용하고 있는 코드들만 에러가 발생하고 있다는 것을 찾아냈습니다.

Untitled

그리고 깨달았습니다! @types/jsonwebtoken을 설치하고나서 vscode를 껐다키지 않았다는 것을,,,,

설마 하는 마음에 vscode를 껐다 키자마자 ESLint가 해당 패키지의 type을 인식하면서 왼쪽의 새빨간 오류 덩어리들이 모두 사라졌습니다...

하..하... 너무 허무했습니다....

결론 : @types 패키지를 설치하고나서 타입 인식이 제대로 안되면 에디터를 껐다 키자...! 되도록이면 해당 패키지 설치할 때 같이 설치하자,,,

Clone this wiki locally