[타입 설계 34] 부정확한 타입보단 미완성타입

2022. 7. 27. 08:00책/이펙티브 타입스크립트

일반적으로 타입이 구체적일수록 버그를 더 많이 잡고 타입스크립트가 제공하는 도구를 활용할 수 있게 된다. 그러나 타입 정밀도를 높이는 과정에서 실수가 발생하기 쉽고 잘못된 타입은 없느니만 못 할 수 있어 주의해야 한다.

1. 부정확한 타입
아래 예시는 지구상의 좌표를 나타내기 위한 인터페이스이며, 타입 정밀도를 높이기 위해 아래와 같은 과정을 거쳤다

  • coordinates는 위경도를 나타낸다
  • 이를 위해 number [ ]보다 구체적인  [ number, number ]인 튜플타입으로 변경했다
  • 그러나 간과한 것은 좌표 정보엔 고도가 있을 수도 있고, 그 외 다른 정보가 있을 수도 있다는 것
  • 결과적으로 타입 선언을 세밀하게 만드려다가 오히려 타입이 부정확해졌다
interface Point {
  type: 'Point';
  coordinates: number[]; // [number, number]로 바꿔야징
}
interface LineString {
  type: 'Line';
  coordinates: number[]; // [number, number]로 바꿔야징
}
interface Polygon {
  type: 'Polygon';
  coordinates: number[][];
}
type Geometry = Point | LineString | Polygon;

 

이제 위 타입을 쓰기 위해선 타입 단언문을 도입하거나 as any를 추가해서 타입 체커를 묵살시켜야 하는 상황이 벌어진다.

 

 

2. 결론

  • 타입 안전성 측면에서 타입이 없는 것보다 잘못된 게 더 나쁘다. 어설프게 완벽을 추구하려고 하지 말자.
  • 정확하게 타입 모델링할 수 없다면 부정확하게 모델링하지 말아야 한다
  • 타입 정보를 구체적으로 만들수록 오류 메시지와 자동 완성 기능에 주의를 기울여야 한다