개발

[React] 화살표 함수 제네릭 타입이 안된다!?!

woojin06 2025. 7. 4. 15:44

사내 프로젝트를 진행중에 제네릭 타입을 사용 해야 할 일이 생겼다

그런데 제네릭 타입을 사용하니 에러 문구가 나왔다 

const getSortingClickHandler = <T>(header: Header<T, unknown>) => {
        return ...
    };

아무 문제가 없어야 하는 타입 정의 구문이어야 한다 허나 아래와 같은 에러 문구가 발생하였다

처음엔 해당 문구를 확인하지 못하고 

 const getSortingClickHandler: <T>(header: Header<T, unknown>) => (event: unknown) => void = (header) => {
		return ...
    }

위와 같이 작성하여 우회하였다 하지만 가독성이 너무 떨어져 고민을 하다

문득 처음 typeScript를 배우던 중 해당 문제를 겪었던 생각이 났다 해당 문제가 발생하는 이유는

 

1. tsx 파서가 < 를 jsx로 시도한다

2. tsx에선 "명확한 타입 문맥" 이 없으면 jsx가 우선시 된다 

3. 화살표 함수 + 제네릭 조합이 jsx와 겹치기에 발생된다

 

그러기에 해결을 하려면 4가지 방법이 있는데

 

1. 괄호를 감싸서 작성한다

2. arrowFunction이 아닌 일반 함수식을 사용한다

3. jsx가 아님을 명확히 한다 

4. <T ,> 를 활용해 제네릭 타입인걸 명시해준다

 

필자는 4번을 채택하여 

const getSortingClickHandler = <T,>(header: Header<T, unknown>) => {
        return ...
    };

이렇게 수정하였다.

 

삽질을 한 이유:

1. 오류 메세지를 제대로 확인하지 않았다.

2. 무작정 코드만 살펴보았다

3. 해당 문제를 검색 해보지 않았다.

 

해당 에러를 만나고 느낀점:

당장 에러 메세지부터 읽어보고 천천히 생각한 뒤 수정하는게 좋다고 생각했고 

해당 문제를 수정하고 나서는 굉장히 허탈했지만 이또한 다시 복기하며 앞으로 이런 일 이 없도록 하겠다.

 

그리고 필자를 포함하여 모든 신입,주니어 개발자들 화이팅이다.