[TypeScript]型の絞り込み

typeof

function showValue(value:string | number){
    if(typeof value === "string"){
        console.log(value.toUpperCase());
    }else{
        console.log(value.toFixed(2));
    }
}

 
instanceof

class John{
    dance(){
        console.log("let's dance!");
    }
}
class Jeff{
    calculate(){
        console.log("1+1=5");
    }
}
function execute(person:John|Jeff){
    if(person instanceof John){
        person.dance();
    }else{
        person.calculate();
    }
}

 
タグ付きユニオン型

interface Circle{
    type:"circle";
    radius:number;
}
interface Square{
    type:"square";
    width:number;
}
type Shape = Circle | Square;
function showData(shape:Shape){
    switch(shape.type){
        case "circle":
            console.log("circle !");
            break;
        case "square":
            console.log("square !");
            break;
    }
}