[타입 설계 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. 결론
- 타입 안전성 측면에서 타입이 없는 것보다 잘못된 게 더 나쁘다. 어설프게 완벽을 추구하려고 하지 말자.
- 정확하게 타입 모델링할 수 없다면 부정확하게 모델링하지 말아야 한다
- 타입 정보를 구체적으로 만들수록 오류 메시지와 자동 완성 기능에 주의를 기울여야 한다
'책 > 이펙티브 타입스크립트' 카테고리의 다른 글
[타입 설계37] 상표 기법(for 공식명칭) (0) | 2022.07.27 |
---|---|
[타입 설계36] 타입 이름은 해당 분야 용어로 (0) | 2022.07.27 |
[타입설계 33] string보단 더 구체적인 타입을 (0) | 2022.07.26 |
[타입설계 32] 인터페이스의 유니온(not 유니온의 인터페이스) (0) | 2022.07.26 |
[타입설계 31] 타입 주변에 null 배치하기 (0) | 2022.07.26 |