본문 바로가기

IT

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

여러 종류의 파라메터를 받는 함수 시그니처를 명세할 때에는 함수 오버로딩 대신 조건부 타입을 활용한 함수 시그니처 명세가 더 정교한 타입 추론을 가능하게 할 수 있습니다.

//비추 (타입 오버로딩)
function double(x: number): number;
function double(x: string): string;
function double(x: any) { return x + x;};

const x = double(10);
const y = double('yy');
const z: string | number = '11';

function zz(z : number | string){
    double(z); // 오류
}
 
// //추천 (조건부 타입)
function double<T extends string | number>(x: T): T extends string ? string : number;
function double(x: any) { return x + x;};

function zz2(z : number | string){
    double(z); // 정상
}

오버로딩 타입보다는 조건부 타입을 사용하는 것이 좋습니다. 조건부 타입은 추가적인 오버로딩 없이 유니온 타입을 지원 가능하기 때문입니다.