Discriminate-Union란
- 유니언 타입을 쓸 때 타입 가드를 쉽게 할 수 있도록 하는 패턴이다.
type Bird {
type: 'bird';
flyingSpeed: number;
}
type Horse {
type: 'horse';
runningSpeed: number;
}
type Animal = Bird | Horse;
function moveAnimal(animal: Animal){
let speed;
switch(animal.type){
case 'bird':
speed = animal.flyingSpeed;
break;
case 'horse':
speed = animal.runningSpeed;
}
console.log('Moving at speed: ' + speed)
}
- interface나 class로 타입을 선언하고 type 프로퍼티를 써준다.
- type 프로퍼티에 number나 string같은 타입이 아닌 정확한 이름을(exact string)을 타입으로 부여한다.
- 'flyingSpeed'이 프로퍼티에 있는지 확인하기 위해 'flyingSpeed' in animal'으로도 확인할 수 있지만 오타가 날 수도 있고 일일히 확인하는 것이 번거로울 수 있다.
Discriminate-Union과 switch문
- 앞서 모든 커스텀 객체 타입(Bird, Horse)에 type 프로퍼티에 정확한 값으로 타입을 지정해줬으므로 switch문을 써서 타입가드를 할 수 있다.