Item 50 오버로딩 타입보다는 조건부 타입을 사용하기

여러 매개변수 타입 지원하기

여러 매개변수 타입을 지원하기 위해 여러 방법이 있다.

  • 유니온 - 매개변수의 타입에 반환 타입이 의존할 경우 문제가 있을 수 있다.

  • 제너릭 - 타입을 구체적으로 만드는 시도는 좋으나 타입이 과하게 구체적일 수 있다.

  • 여러 타입 선언으로 분리하기 - 함수의 구현체는 하나여도, 타입 선언은 몇 개든지 만들 수 있다. 하지만 유니온 타입 관련해서 문제가 발생할 수 있다. 자세한 내용은 책 참고.

  • 오버로딩 타입(e.g. string | number)을 추가할 수도 있다.

하지만 위에 나온 것들보다 더 좋은 방법은 조건부 타입(conditional type)을 사용하는 것이다.

function double<T extends number | string>(
  x: T
): T extends string ? string | number

function double(x: any) { return x + x }

제너릭을 사용하는 것과 유사하지만, 반환 타입이 더 정교하다. 삼항 연산자 사용하듯 사용하면 된다.

Summary

  • 오버로딩 타입보다 조건부 타입을 사용하는 것이 좋다. 조건부 타입은 추가적인 오버로딩 없이 유니온 타입을 지원할 수 있다.

Last updated