자바스크립트는 아래의 syntax로 default parameter를 지원함.
function name(parameter1=defaultValue1,...) {
// do something
}
위와 같은 syntax에서 인자를 넘겨지주지 않거나 undefined를 넘겨주게 되면 함수가 default값을 사용해서 해당 인자를 초기화함.
function applyDiscount(price, discount = 0.05) {
return price * (1 - discount);
}
console.log(applyDiscount(100)); // 95
타입스크립트도 자바스크립트랑 같은 syntax를 사용할 수 있음.
function name(parameter1:type=defaultvalue1, parameter2:type=defaultvalue2,...) {
//
}
아래 코드는 타입스크리트에서 default parameter를 사용하는 것임.
function applyDiscount(price: number, discount: number = 0.05): number {
return price * (1 - discount);
}
console.log(applyDiscount(100)); // 95
function type에는 default parameter를 넣을 수 없음.
아래 코드는 에러나옴.
let promotion: (price: number, discount: number = 0.05) => number;
default parameter와 optional parameter는 같은 type임.
function applyDiscount(price: number, discount: number = 0.05): number {
// ...
}
function applyDiscount(price: number, discount?: number): number {
// ...
}
위 2개는 아래와 같음.
(price: number, discount?: number) => number
optional parameter는 일반적인 parameter의 뒤에 나와야하지만 default parameter는 그런 제약이 없음.
default parameter가 일반적인 parameter보다 앞에 나올 경우에 default로 초기화된 값을 사용하려면 인자로undefined
를 넘겨주면됨.
아래 코드는 특정 년월의 일수를 리턴해줌.
여기서 year에 아무 값을 넘겨주지 않으면 현재 연도가 됨.
function getDay(year: number = new Date().getFullYear(), month: number): number {
let day = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
// leap year
if (((year % 4 == 0) &&
!(year % 100 == 0))
|| (year % 400 == 0))
day = 29;
else
day = 28;
break;
default:
throw Error('Invalid month');
}
return day;
}
아래는 2019년 2월의 날짜수를 가져옴.
let day = getDay(2019, 2);
console.log(day); // 28
올해 2월의 날짜수를 가져옴.
let day = getDay(undefined, 2);
console.log(day);
parameter:=defaultValue
로 default parameter의 값을 초기화 할때 사용함.- default paramter는 옵션임
- default로 초기화된 parameter를 사용하려면 함수를 부를 때 인자를 빼먹거나
undefined
로 부르면됨