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