TypeScript 5.1의 undefined 반환 함수 타입 체크 개선

배경

프로젝트를 TypeScript 5.1로 업그레이드하면서 기존에 문제없이 동작하던 코드에서 타입 에러가 발생했다. 반환 타입이 undefined인 함수에 대한 타입 체크가 더 엄격해진 것이 원인이었다.

문제 상황

interface Handler {
  onClick: () => undefined;
}

const component: Handler = {
  onClick: () => {
    console.log('clicked');
    // Type error: A function whose declared type is neither 'void' nor 'any' must return a value.
  }
};

기존 5.0에서는 경고만 표시되던 것이 5.1에서는 명확한 에러로 처리되었다.

해결 방법

1. 명시적 undefined 반환

const component: Handler = {
  onClick: () => {
    console.log('clicked');
    return undefined;
  }
};

2. void 타입 사용

실제로 반환값을 사용하지 않는다면 void가 더 적절했다.

interface Handler {
  onClick: () => void;
}

적용 결과

프로젝트 내 이벤트 핸들러 타입을 전면 검토했다. 대부분의 경우 void가 의도에 맞았고, 실제로 undefined를 반환해야 하는 케이스는 거의 없었다.

레거시 코드에서 () => undefined로 정의된 100여 개의 함수 시그니처를 () => void로 변경했고, 타입 안정성이 개선되었다.

결론

TypeScript의 타입 체크가 점진적으로 엄격해지는 것은 장기적으로 코드 품질 향상에 도움이 된다. 다만 메이저 업그레이드 시 충분한 테스트 시간을 확보하는 것이 중요하다.