아이템 50 오버로딩 타입보다는 조건부 타입을 사용하기
조건부 타입은 타입 공간의 if
구문과 같다.
function double<T extends number | string>(x: T): T extends string ? string : number;
function double(x: any) {
return x + x;
}
- 조건부 타입은 자바스크립트의 삼항 연산자처럼 사용하면 된다.
T
가string
의 부분 집합이면(string
, 또는 문자열 리터럴, 또는 문자열 리터럴의 유니온), 반환 타입이string
이다.- 그 외의 경우는 반환 타입이
number
이다.
오버로딩 타입이 작성하기는 쉽지만, 조건부 타입은 개별 타입의 유니온으로 일반화하기 때문에 타입이 더 정확해진다. 타입 오버로딩이 필요한 경우에 가끔 조건부 타입이 필요한 상황이 발생한다. 각각의 오버로딩 타입이 독립적으로 처리되는 반면 조건부 타입은 타입 체커가 단일 표현식으로 받아들이기 때문에 유니온 문제를 해결할 수 있다.
요약
- 오버로딩 타입보다 조건부 타입을 사용하는 것이 좋다. 조건부 타입은 추가적인 오버로딩 없이 유니온 타입을 지원할 수 있다.