Exhaustiveness Check
가능한 모든 옵션을 다 썼는지 확인하기 위해 사용됩니다.
Type never
never type은 어디든 할당됩니다.
하지만 never에는 어떤 타입도 할당할 수 없습니다.
이러한 특징은 에러 핸들링으로 사용할 수 있습니다.
// ...코드 생략
type FarmAnimal = Pig | Rooster | Cow;
function getFarmAnimalSound(animal: FarmAnimal) {
// 타입에 공통된 속성을 지정하고, switch문으로 판별 가능.
// if문으로도 당연히 가능합니다.
switch (animal.kind) {
case "pig":
console.log(animal);
return "돼지를 판별했습니다.";
case "cow":
console.log(animal);
return "소를 판별했습니다.";
case "rooster":
console.log(animal);
return "닭를 판별했습니다.";
default:
const nothingAnimal: never = animal;
}
}
이유는, 1번과 달리 Sheep
이라는 타입을 하나 더 추가했습니다.
그러나 switch문에 Sheep case
를 작성하지 않았습니다.
default에 never 타입을 이용하여 타입 소진 검사(에러 핸들링)를 진행한 모습입니다.
에러 해결 방법으로는 sheep case만 추가해주면 에러는 사라집니다.
이로써 모든 타입을 사용했음을 알 수 있습니다.
// sheep case 추가
type FarmAnimal = Pig | Rooster | Cow | Sheep;
function getFarmAnimalSound(animal: FarmAnimal) {
// 타입에 공통된 속성을 지정하고, switch문으로 판별 가능.
switch (animal.kind) {
case "pig":
console.log(animal);
return "돼지를 판별했습니다.";
case "cow":
console.log(animal);
return "소를 판별했습니다.";
case "rooster":
console.log(animal);
return "닭를 판별했습니다.";
case "sheep":
console.log(animal);
return "닭를 판별했습니다.";
default:
const _exhaustiveCheck: never = animal;
return alert(_exhaustiveCheck);
}
}