[typescript] 타입 가드 함수를 활용한 인터섹션 타입의 자동 타입 가드

인터섹션 타입과 타입 가드 함수는 TypeScript에서 매우 강력한 기능 중 하나입니다. 이 두 가지를 결합하여 코드를 더 안정적으로 만들 수 있습니다.

이 포스트에서는 타입 가드 함수를 활용하여 인터섹션 타입을 보다 효과적으로 활용하는 방법에 대해 알아보겠습니다.

인터섹션 타입

인터섹션 타입은 TypeScript에서 두 개 이상의 타입을 결합하여 새로운 타입을 생성하는 데 사용됩니다. 예를 들어, 다음과 같이 두 개의 타입을 인터섹션하여 새로운 타입을 만들 수 있습니다.

type A = {name: string};
type B = {age: number};

type C = A & B; // C는 {name: string}와 {age: number}의 속성을 모두 가지는 타입

인터섹션 타입을 사용하면 두 개 이상의 타입을 조합하여 새로운 타입을 정의할 수 있으므로, 코드의 유연성과 안정성을 높일 수 있습니다.

타입 가드 함수

타입 가드 함수는 런타임에 객체의 타입을 검사하고, 해당 타입에 따라 다른 동작을 수행할 수 있도록 돕는 TypeScript의 기능입니다. 타입 가드 함수를 사용하면 더욱 안정적인 코드를 작성할 수 있게 됩니다.

타입 가드 함수는 보통 다음과 같은 형태를 가집니다.

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

위의 예제에서 value is string은 타입 가드 함수의 반환 타입으로써, 해당 함수가 참을 반환할 때 value가 string 타입임을 TypeScript에게 알려줍니다.

인터섹션 타입과 타입 가드 함수의 결합

이제 인터섹션 타입과 타입 가드 함수를 결합하여 보다 안전한 코드를 작성하는 방법에 대해 알아보겠습니다. 아래의 예제를 통해 자세히 살펴보겠습니다.

type Person = {name: string} & {age: number};

function isPerson(obj: any): obj is Person {
  return 'name' in obj && 'age' in obj;
}

function processPerson(obj: unknown) {
  if (isPerson(obj)) {
    // 여기서 obj는 Person 타입으로 추론됩니다.
    console.log(obj.name, obj.age);
  } else {
    console.log("This is not a Person object");
  }
}

위의 예제에서 isPerson 함수는 Person 타입의 타입 가드 함수로 정의되어 있습니다. 이 함수를 통해 객체가 Person 타입인지 검사하고, 해당하는 경우에만 안전하게 Person 타입으로 사용할 수 있습니다.

이처럼 인터섹션 타입과 타입 가드 함수를 결합하여, 더욱 안정적이고 유연한 TypeScript 코드를 작성할 수 있습니다.

결론

타입 가드 함수를 활용하여 인터섹션 타입을 안전하게 다루는 방법에 대해 살펴보았습니다. 이러한 기능들을 활용하여 TypeScript 코드의 안정성을 높이고, 에러를 방지하는 데에 기여할 수 있습니다. 인터섹션 타입과 타입 가드 함수를 적절히 활용하여 안정적이고 효율적인 코드를 작성해보세요!