Branded types have saved my ass so many times
- TypeScript의 '브랜디드 타입'은 타입 시스템에 추가적인 의미와 로직을 부여하여 강력한 타입 검사를 가능하게 합니다. 🏷️
- 이는 런타임에는 동일한 기본 타입(예:
string)이지만, 컴파일 타임에는 서로 다른 의미를 가지는 값들을 명확히 구분하는 데 사용됩니다. ↔️
- 예를 들어,
절대 경로와 상대 경로를 브랜디드 타입으로 정의하여, 절대 경로를 기대하는 함수에 상대 경로가 전달되는 것을 컴파일 시점에서 방지할 수 있습니다. 🚫
- 브랜디드 타입은 기본 타입(
T)과 고유한 심볼(unique symbol)을 교차(&)시켜 정의되며, 이를 통해 각 타입에 고유한 '브랜드'를 부여합니다. ✨
- 이 패턴은
fs.readdir와 같이 상대 경로를 반환하는 함수에서 발생할 수 있는 '잘못된 디렉토리 삭제'와 같은 심각한 런타임 오류를 예방하는 데 매우 효과적입니다. 🛡️
- 브랜디드 타입은 런타임에 존재하지 않으므로, 코드에
as 단언문을 사용하여 명시적으로 타입을 지정해야 하지만, 이는 타입의 설명력과 견고성을 크게 향상시킵니다. 🛠️
- 결과적으로 브랜디드 타입은 코드를 더욱 강력하고 예측 가능하게 만들며, 복잡한 애플리케이션에서 흔히 발생하는 타입 관련 버그를 줄이는 데 기여합니다. 💪
데브허브 | DEVHUB | Branded types have saved my ass so many times