본문 바로가기

프로그래밍/javascript

[TYPE SCRIPT] MAP 함수 오류 (해결책)

This expression is not callable.
  Each member of the union type .. 어쩌구 하는 오류가 발생할 경우가 있을 것이다.

아마도 MAP함수를 DYNAMIC하게? 쓸때 자주 발생할 텐데, 발생하는 경우는 대부분 즉, 배열의 타입을 명확하게 명시하지 않을때 발생한다. 물론 아래의 경우에 number[] 또는 string[]이라고 명시를 했지만, 조금 더 명시적으로 표시해야 한다.

const a number[] | string[] = []

a.map((item) => console.log(item))

이처럼 말이다.

const a = (string | number)[] = []

a.map((item)=>console.log(item))

그러나 사실 이렇게 단편적으로 사용하는 경우는 거의 없을 것 이다.

서버에서 json 형태로 받아오고, 파싱하고.. 좀 더 복잡한 커스텀 타입을 쓰거나 더 많은 타입이 할당 될 수있을때 (이런 경우는 피하는게 가장 좋지만) 혹시라도 발생한다면 아래와 같이 타입을 명시해주면 된다.! 컴파일러에게 이것은 배열이라는 것을 명시해 주는 것 이다. 이렇게 타입을 명시해 주는 것을 type assertion 이라고 한다.

(a as Array<타입명시>).map((item)=> console.log(item))

프로그래밍을 하면서 맞닥뜨리는 수많은 문제들의 답은 이미 구글에 있다. 그러나 어려운 것은 검색 키워드를 모른다는 것이다. 오늘 문제도 type assertion 이라는 키워드를 알았으면 훨씬 빨리 해결 할 수 있었을 텐데 ㅠㅠ

 

*주변에 최대한 많은 멘토(고수)를 두자. 키워드만 알려줘도 엄청나게 많은 시간을 단축할 수 있다.!

#스택 오버 플로우의 이런, 저런 글들을 읽어보니 추후에 이런 오류가 나지 않도록 업데이트 되야 한다는 의견이 많았다.