Switch 문은 컴파일 시점에도 버그를 숨긴다
TypeScript switch 문은 조용히 케이스를 빠뜨리게 만든다. 빌드에서 실패하고 런타임에서는 실패하지 않는 exhaustiveness-checked 패턴으로 대체하는 방법을 알아본다.
shape 타입을 리팩토링하고 새로운 variant를 추가했는데도 TypeScript는 초록불이었다. CI를 통과했고, 배포도 나갔다. 그런데 사용자가 를 반환하는 런타임 분기를 만났고, 앱이 프로덕션에서 터져 버렸다. 범인은 거의 확실히 switch 문이었다. TypeScript의…