[typescript] 타입 가드를 사용한 데이터 유효성 검사

타입스크립트는 타입 가드(type guard)를 활용하여 런타임에 데이터의 유효성을 검사할 수 있습니다. 타입 가드를 사용하면 변수의 타입을 정확히 판단하여 타입 안정성을 보장할 수 있습니다.

타입 가드란?

타입 가드는 주로 타입이 여러 개일 때 해당 변수가 어떤 타입인지 판별해주는 방법을 의미합니다. 보통 typeof, instanceof, in 연산자, 사용자 정의 타입 가드 함수를 통해 구현할 수 있습니다.

예를 들어 다음과 같이 typeof 연산자를 사용한 타입 가드를 활용할 수 있습니다.

function isString(x: any): x is string {
  return typeof x === "string";
}

function exampleFunc(x: any) {
  if (isString(x)) {
    console.log(x.length); // 여기서 x는 string 타입으로 인식됨
  } else {
    console.log(x);
  }
}

exampleFunc("hello"); // 출력: 5
exampleFunc(123); // 출력: 123

위 예제에서 isString 함수는 xstring 타입인지 여부를 판별하고, exampleFunc 함수에서 isString을 통해 string 타입 여부를 확인한 후 length 속성을 안전하게 사용할 수 있습니다.

타입 가드의 활용

타입 가드를 사용하면 런타임에서 데이터의 타입을 확인할 수 있어 더 안정적인 코드를 작성할 수 있습니다. 특히 외부 라이브러리나 사용자 입력과 같이 타입이 명확하지 않은 경우에 유용하게 활용될 수 있습니다. 또한, 타입 가드를 활용하면 에러를 더 빨리 발견하고 처리할 수 있어 개발 생산성을 향상시킬 수 있습니다.

사용자 정의 타입 가드 함수

타입스크립트에서는 사용자가 직접 타입 가드 함수를 만들어 활용할 수 있습니다. 예를 들어 다음과 같이 사용자 정의 함수를 만들어 타입 가드로 활용할 수 있습니다.

function isNumber(x: any): x is number {
  return typeof x === "number";
}

function printValue(val: string | number) {
  if (isNumber(val)) {
    console.log(`Value is a number: ${val}`);
  } else {
    console.log(`Value is a string: ${val}`);
  }
}

printValue(123); // 출력: Value is a number: 123
printValue("hello"); // 출력: Value is a string: hello

위의 코드에서 isNumber 함수는 typeof 연산자를 사용하여 인자가 number 타입인지 여부를 판별하고, printValue 함수에서 해당 타입 가드를 활용하여 타입을 확인하여 안정적인 코드를 작성할 수 있습니다.

결론

타입 가드를 사용하면 런타임에서 데이터의 유효성을 검사하여 타입 안정성을 보장할 수 있습니다. 이를 통해 안정적이고 안전한 코드를 작성할 수 있으며, 에러를 미리 방지하고 안정적인 유형의 코드를 작성할 수 있습니다. 타입 가드는 타입 안정성을 유지하면서 코드를 더욱 견고하고 안정적으로 만드는 데 도움을 줄 수 있습니다.

타입 가드에 대한 자세한 정보는 타입스크립트 공식 문서를 참고하세요.