[typescript] 타입 가드와 타입 단언

타입스크립트(TypeScript)에서는 자바스크립트의 동적 타입을 보완하기 위해 정적 타입 시스템을 제공합니다. 하지만 때때로 컴파일러가 변수의 타입을 추론하지 못하는 상황이 발생할 수 있습니다. 이때 타입 가드와 타입 단언을 사용하여 명시적으로 타입을 지정하고, 코드를 더 안전하게 만들 수 있습니다.

타입 가드(Type Guards)

타입 가드는 런타임에서 변수의 타입을 확인하고, 해당 타입에 따라 다른 동작을 하도록 하는 방법을 제공합니다. 이를 통해 타입 추론이 실패하는 상황에서도 안전하게 코드를 작성할 수 있습니다.

function isNumber(value: any): value is number {
    return typeof value === 'number';
}

function isString(value: any): value is string {
    return typeof value === 'string';
}

function processValue(value: any) {
    if (isNumber(value)) {
        // value is treated as a number here
        console.log(value + 1);
    } else if (isString(value)) {
        // value is treated as a string here
        console.log(value.toUpperCase());
    } else {
        // value is treated as any
        console.log(value);
    }
}

위의 예제에서 isNumberisString 함수는 각각 숫자와 문자열인지를 확인하는 타입 가드입니다. processValue 함수에서 타입 가드를 활용하여 변수 value의 타입에 따라 다른 연산을 수행하고 있습니다.

타입 단언(Type Assertion)

타입 단언은 컴파일러에게 “나는 이 변수가 어떤 타입이라고 확신한다”고 명시하는 것입니다. 주로 타입스크립트가 타입 추론을 할 수 없는 복잡한 상황에서 사용됩니다.

let someValue: any = "hello world";
let strLength: number = (someValue as string).length;

위의 예제에서 (someValue as string)someValue 변수가 문자열이라고 단언하고 있습니다. 이를 통해 문자열 타입의 메서드인 length에 접근할 수 있게 됩니다.

타입 가드와 타입 단언은 타입스크립트 코드를 더욱 안전하게 만들어주는 중요한 도구입니다. 올바른 상황에서 적절히 사용하여 코드의 가독성과 안정성을 유지할 수 있도록 노력해야 합니다.

더 많은 정보를 원하신다면 타입스크립트 공식 문서를 참고하시기 바랍니다.