Join 함수

G·2023년 6월 7일
0

TypeScript

목록 보기
6/6
post-thumbnail

✏️ join 함수

TypeScript의 join 함수에 대해 알아보도록 하겠습니다.

interface User {
  name: string;
  age: number;
}

function join (name: string, age: number | string): User | string {
  if (typeof age === 'number') {
    return {
      name,
      age,
    };
  } else {
    return '나이를 숫자로 입력해 주세요.';
  }
}

const kim: User = join('Kim', 30); --- (1)
const lee: string = join('Lee', '20'); --- (2)

join 함수를 보면 age가 number 면 User를 반환하고 age가 string 이면 string인 '나이를 숫자로 입력해 주세요.'을 반환합니다. 함수만 보면 정상 동작을 할 거 같지만 (1) 번과 (2) 번을 입력하면 kimlee에서 error가 발생합니다.
함수에서는 error가 발생하지 않는데 왜 error가 발생할까요?
그 이유는 kim이 User 객체를 반환하는데 확신이 없기 때문입니다. 이와 같은 이유로 lee도 string으로 반환하는데 확신이 없기에 error가 발생하는 것입니다.

이를 해결하기 위해서는 오버로드 사용해 줍니다.

함수 오버로드는 전달받은 매개변수의 개수나 타입에 따라 다른 동작을 실행하게 합니다.


다음은 오버로드를 사용한 코드입니다.
interface User {
  name: string;
  age: number;
}

function join (name: string, age: number): User;
function join (name: string, age: string): string;
function join (name: string, age: number | string): User | string {
  if (typeof age === 'number') {
    return {
      name,
      age,
    };
  } else {
    return '나이를 숫자로 입력해 주세요.';
  }
}

const kim: User = join('Kim', 30); // { name: 'Kim', age: 30 }
const lee: string = join('Lee', '20'); // 나이를 숫자로 입력해 주세요.

이처럼 동일한 함수에서 매개변수의 개수나 타입에 따라서 다르게 동작해야 한다면 본래의 함수 위에 오버로드를 작성해 주면 됩니다.

profile
기!술! 블로그

0개의 댓글