Tip-03. 타입 선언과 @types

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

아래의 오버로딩 된 함수는 입력으로 number를 받고 출력으로 string을 반환할 수도 있는 잘못된 모델이다.

function double(x: number | string): number | string;
function double(x: any) {
  return x + x;
}

그래서 아래와 같이 제네릭을 사용하여 동작을 더 자세하게 모델링 할 수 있다.
하지만 이건 너무 과하다. 타입이 string or number 가 아니라 값 자체로 고정된다.

function double<T extends number | string>(x: T): T;
function double(x: any) {
  return x + x;
}

const num = double(12); // 타입이 12
const str = double('x'); // 타입이 "x"

위의 문제들을 해결하기 위해서 조건부 타입을 사용하면 된다.
반환 타입에 삼항연산자를 사용하는 것이다.

function double<T extends number | string>(x: T): T extends string ? string : number;
function double(x: any) {
  return x + x;
}
Last Updated: