유니온 타입의 속성을 가지는 인터페이스를 작성 중입니까? 그렇다면, 인터페이스의 유니온 타입을 사용하는 것이 더 낫지 않은지 검토가 필요합니다.
벡터를 그리는 프로그램을 작성 중이고, 특정한 기하학적 타입을 가지는 계층의 인터페이스를 정의한다고 가정해 보고 어떤 방식으로 인터페이스를 설계하는 것이 유리한지 고민해봅시다.
// 비추 - 비정상적이 조합의 값이 허용되는 구조
interface Layer {
layout: FillLayout | LineLayout | PointLayout;
point: FillPaint | LinePaint | PointPatin;
}
// 추천
interface FillLayer {
layout : FillLayout;
paint: FillPaint;
}
interface LineLayer {
layout: LineLaout;
paint: LinePaint;
}
interface PointLayer {
layout: PointLayout;
paint: PointPaint;
}
|
아래는 위 예제 프로그램의 태그된 유니온의 관점에서 어떤 식으로 인터페이스를 설계하는 것이 유리한지를 보여줍니다.
인터페이스 내 속성들을 유니온으로 가져가는 것보다는 하나의 타입을 만들 때, 여러 인터페이스를 유니온으로 작성하는 것이 타입을 좁히는데 더욱 편리합니다.
// 비추천 (유니온의 인터페이스)
interface Layer {
type : 'fill' | 'line' | 'point'
layout : FillLayout | LineLayout | PointLayout;
paint: FillPaint | LinePaint | PointPatin;
}
//추천 (인터페이스의 유니온 방식)
interface FillLayer {
type : 'fill';
layout: FillLayout;
paint: FillPaint;
}
interface LineLayer {
type : 'line';
layout: LineLayout;
paint: LinePaint;
}
interface PointLayer {
type : 'point';
layout: PointLayout;
paint: PointPaint;
}
type Layer = FillLayer | LineLayer | PointLayer; //추천 (인터페이스의 유니온 방식)
|
* 유니온 타입의 속성을 여러개 가지는 인터페이스에서는 속성 간의 관계가 분명하지 않을 수 있기 때문에 잠재적 버그가 많아질 수 있으므로 지양해야 한다.
* 유니온의 인터페이스보다 인터페이스의 유니온이 더 정확하고 타입스크립트 타입 추론이 좀 더 정확해진다.
* 타입스크립트가 제어 흐름을 분석할 수 있도록 타입에 태그를 넣는 것을 추천한다. 태그 된 유니온은 타입스크립트에서 일상적인 패턴이다.
'IT' 카테고리의 다른 글
Effective Typescript - 34 - 부정확한 타입보다는 미완성 타입을 사용하기 (0) | 2022.01.23 |
---|---|
Effective Typescript - 33 - string 타입보다 더 구체적인 타입 사용하기 (0) | 2022.01.23 |
Effective Typescript - 31 - 타입 주변에 null 값 배치하기 (0) | 2022.01.23 |
Effective Typescript - 30 - 문서에 타입 정보를 쓰지 않기 (0) | 2022.01.23 |
Effective Typescript - 29 - 사용할 때는 너그럽게, 생성할 때는 엄격하게 (0) | 2022.01.23 |