배열의 forEach 메서드는 콜백 함수를 인수로 받습니다. 첫 번째 콜백 함수는 숫자를 반환하고, 두 번째 콜백 함수는 undefined를 반환(console.log의 반환값이 undefined)합니다. 그렇다면 콜백 함수의 타입은 무엇일까요? (v: number) => number | undefined일까요? 갑자기 어떤 사람이 다음과 같이 사용해버린다면 어떻게 해야 할까요?
[1, 2, 3].forEach((v) => v.toString());
이처럼 forEach의 콜백 함수는 미리 타이핑하기 곤란합니다. 사용자가 그때그때 반환값을 다르게 정할 수 있으니까요. 이와 같은 이유로 콜백 함수의 타이핑을 미리 해두기 곤란하므로 어떠한 반환값이든 다 받을 수 있는 void 타입이 등장하게 되었습니다. (v: number) => void로 타이핑하면 모든 문제가 해결되는 것이죠.
정리하면 void는 두 가지 목적을 위해 사용합니다.
• 사용자가 함수의 반환값을 사용하지 못하도록 제한한다.
• 반환값을 사용하지 않는 콜백 함수를 타이핑할 때 사용한다.