함수의 타입 정의

Optional parameter

Rest Parameter

함수 타입 표현식 (Function Type Expression)

호출 시그니처 (Call Signature)

함수 타입의 호환성

함수 오버로딩 (Function Overloading)

// ---------------------------
// 오버로드 시그니처
// ---------------------------
function add(a: number, b: number): number;
function add(a: number, b: number, c: number, d: number): number;

// ---------------------------
// 구현 시그니처
// ---------------------------
// 타입 좁히기를 통해 모든 오버로드 시그니처를 구현해줄 것
// 오버로드 시그니처에서 공통적으로 가지는 파라미터는 필수 파라미터로,
// 그렇지 않은 파라미터는 선택적 파라미터로 정의
function add(a: number, b: number, c?: number, d?: number): number {
  if(typeof c === 'number' && typeof d === 'number') {
    return a + b + c + d;
  } else {
    return a + b;
  }
}

add(1, 2); // 정상
add(1, 2, 3, 4); // 정상

// 파라미터가 3개인 시그니처는 정의하지 않았으므로 에러 발생
add(1, 2, 3); // Error: No overload expects 3 arguments, but overloads do exist that expect either 2 or 4 arguments.

사용자 정의 타입 가드 (User-defined Type Guard)