[typescript] 제네릭 타입의 상속과 확장

제네릭 타입은 TypeScript에서 다형성을 구현하는 데 사용되며, 코드를 보다 유연하게 작성할 수 있게 도와줍니다. 이번 블로그 포스트에서는 TypeScript에서 제네릭 타입의 상속과 확장에 대해 알아보겠습니다.

제네릭 타입 기본 개념

먼저, TypeScript에서 제네릭 타입은 코드를 작성할 때 타입을 인수로 가지는 것을 의미합니다. 예를 들어, 배열을 다루는 함수를 작성할 때 배열의 요소 타입을 제네릭으로 지정하여 재사용성을 높일 수 있습니다.

function reverse<T>(input: T[]): T[] {
  return input.reverse();
}

const numbers = [1, 2, 3, 4, 5];
const reversedNumbers = reverse(numbers); // [5, 4, 3, 2, 1]

위 예제에서 reverse 함수는 제네릭 타입 T를 이용하여 배열의 요소 타입을 동적으로 처리하고 있습니다.

제네릭 타입 상속

TypeScript에서는 제네릭 타입을 기반으로 하는 새로운 제네릭 타입을 만들 수 있습니다. 이를 통해 여러 제네릭 타입 간에 상속 관계를 형성할 수 있습니다.

interface Result<T> {
  value: T;
  error: string | null;
}

interface SuccessResult<T> extends Result<T> {
  value: T;
  error: null;
}

interface ErrorResult<T> extends Result<T> {
  value: null;
  error: string;
}

위 예제에서 SuccessResultErrorResultResult 제네릭 타입을 상속하여 valueerror 속성을 가집니다.

제네릭 타입 확장

또한, TypeScript에서는 제네릭 타입을 인터페이스와 함께 사용하여 확장할 수 있습니다.

interface Box<T> {
  value: T;
}

interface BoxWithNumber<T> extends Box<T> {
  value: T;
  number: number;
}

위 예제에서 BoxWithNumber 인터페이스는 Box 제네릭 타입을 확장하여 number 속성을 추가하고 있습니다.

제네릭 타입의 상속과 확장은 코드의 유연성과 재사용성을 높일 수 있는 강력한 도구입니다. TypeScript에서 제네릭을 다뤄보면서 상속과 확장을 통해 더욱 효과적인 다형성을 구현해보시기를 권장합니다.

참고문헌: TypeScript Handbook - Generics