[typescript] type guard

설명

타입 가드(type guard)

타입 체커에게 파라미터의 타입을 좁힐 수 있다고 알려주는데 사용

예시

interface Car {
    name: string,
    engine: string,
}

interface Bicycle {
    name: string,
    frame: string,
}

type Vehicle = Car | Bicycle;

const vehicle: Vehicle = {
    name: 'good bike',
    frame: 'normal',
}

파라미터의 타입이 Bicycle인지 체크하는 checkBicycle이라는 메소드를 생성하여 사용 타입이 Bicycle이면 true를 반환 하지만 에러 발생

const checkBicycle = (vehicle: Vehicle): boolean => {
    return 'frame' in vehicle;
}

const upgradeBicycleFrame = (vehicle: Vehicle): void => {
    if (checkBicycle(vehicle)) {
        // Property 'frame' does not exist on type 'Vehicle'.
        //   Property 'frame' does not exist on type 'Car'.
        vehicle.frame = 'good';
    }
}

타입가드를 사용하여 타입을 좁히고 타입체커에게 파라미터의 타입을 알려줌

const checkBicycle = (vehicle: Vehicle): vehicle is Bicycle => {
    return 'frame' in vehicle;
}

const upgradeBicycleFrame = (vehicle: Vehicle): void => {
    if (checkBicycle(vehicle)) {
        vehicle.frame = 'good';
    }
}

links

social