[typescript] 타입 추론을 위한 데코레이터 활용 방법

타입스크립트에서 데코레이터를 사용하면 각종 리플렉션 기능을 활용하여 타입 추론(type inference)을 개선할 수 있습니다. 이를 통해 코드의 가독성과 안정성을 향상시킬 수 있습니다.

데코레이터란 무엇인가요?

먼저, 데코레이터가 무엇인지 알아보겠습니다. 데코레이터는 클래스, 메서드, 프로퍼티 또는 매개변수 등의 선언을 수정하거나 확장할 수 있는 특별한 종류의 선언으로, @ 기호를 이용하여 사용합니다.

function myDecorator(target: any, propertyKey: string) {
   // 데코레이터 로직 구현
}

class MyClass {
  @myDecorator
  myProperty: string;
}

데코레이터를 활용하여 코드의 동작과 구조를 변경하거나 추가 기능을 구현할 수 있습니다.

타입 추론 개선을 위한 데코레이터 활용

타입 추론을 개선하기 위해 다음과 같은 방법들을 데코레이터를 통해 활용할 수 있습니다.

타입 가드 적용

데코레이터를 사용하여 타입 가드(logic that checks the type of a variable)를 구현할 수 있습니다. 예를 들어, 문자열이 비어있지 않은지 검사하여 null 또는 undefined를 방지할 수 있습니다.

function nonEmpty(target: any, propertyKey: string) {
  let value: string;

  Object.defineProperty(target, propertyKey, {
    get: () => value,
    set: (newValue: string) => {
      if (!newValue) {
        throw new Error('Value must not be empty');
      }
      value = newValue;
    },
  });
}

class Example {
  @nonEmpty
  myProperty: string;
}

타입 확장

데코레이터를 사용하여 프로퍼티의 타입을 확장하거나 변경할 수 있습니다.

function arrayOfStrings(target: any, propertyKey: string) {
  let value: string[];

  Object.defineProperty(target, propertyKey, {
    get: () => value,
    set: (newValue: string[]) => {
      // 추가적인 검사 또는 로직 수행
      value = newValue;
    },
  });
}

class Example {
  @arrayOfStrings
  myProperty: string[];
}

메타데이터 확장

데코레이터를 사용하여 메타데이터를 추가하여 타입 추론을 개선할 수 있습니다.

function addMetadata(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  Reflect.defineMetadata('customMetadata', 'example', target, propertyKey);
}

class Example {
  @addMetadata
  myProperty: string;
}

커스텀 타입 추론 로직 구현

데코레이터를 사용하여 커스텀한 타입 추론 로직을 구현할 수 있습니다. 이를 통해 복잡한 타입 추론을 단순하게 만들 수 있습니다.

function typeInferenceLogic(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  if (propertyKey === 'myProperty') {
    descriptor.value = 123;
  }
}

class Example {
  @typeInferenceLogic
  myProperty: number;
}

결론

데코레이터를 활용하여 타입 추론을 개선하면 코드의 가독성과 안정성을 향상시킬 수 있습니다. 데코레이터를 활용하여 타입 가드, 타입 확장, 메타데이터 추가, 커스텀 타입 추론 로직 등을 구현하여 타입 추론을 보다 정확하게 제어할 수 있습니다.

이상으로 타입 추론을 위한 데코레이터 활용 방법에 대해 알아보았습니다.

참고 자료: