본문 바로가기
Language/TypeScript

interface optional 속성/ 매개변수 타입과 기본값/함수 오버로드와 매개변수

by 싯벨트 2022. 10. 23.
728x90

# interface optional 속성

  • interface에서 optional 속성은 뒤에 물음표를 붙인다. (price?)
  • 타입으로 인터페이스를 설정했을 때, 선택적 속성은 없어도 오류가 발생하지 않는다.
  • 해당 속성에는 undefined가 할당된다. 
interface CraftBeer {
    readonly name: string
    price?: number
    exist: boolean
}

let myBeer:CraftBeer = {
    name: 'hogarden',
    exist: true,
}

function callBeer(beer:CraftBeer){
    console.log(beer.name)
    console.log(beer.exist)
    console.log(beer.price)
}

callBeer(myBeer)

# 매개변수 타입과 기본값

  • b의 기본값이 100, 즉 number이므로 타입도 number로 추론된다.
  • 두 번째 매개변수가 없거나, undefined일 때는 기본값이 적용된다. 
function sum(a: number, b=100):number{
    return a + b
}

console.log(sum(10,20));
console.log(sum(10, undefined))
console.log(sum(10));

# 함수의 오버로드와 매개변수

  • 오버로딩의 순서는 다음과 같다
    1. 매개변수 1개인 경우를 정의한다.
    2. 매개변수 3개인 경우를 정의한다.
    3. 매개변수 1개와 옵셔널 매개변수 2개를 정의한다. 
  • 3개인 경우의 수를 분기해주고(narrowing) 3개의 매개변수를 넣고, 아닌 경우에는 1개의 매개변수가 동작하도록 한다. 
function makeDate(timestamp: number):Date;
function makeDate(m: number, d:number, y:number): Date;
function makeDate(mOrTime: number, d?:number, y?:number):Date{
    if(d!==undefined && y!==undefined){
        return new Date(y, mOrTime, d)
    } else{
        return new Date(mOrTime)
    }
}

const d1 = makeDate(12345678);
const d2 = makeDate(5, 5, 5);
const d3 = makeDate(1, 3); // error

* 오버로딩이 없고, 옵셔널 매개변수만 줘도 되지 않는가?

가능하다.

다만 타입스크립트가 매개변수의 개수(1개, 3개가 아니라 2개일 때 등)를 판단하여 오류를 띄워주지 않는다.