호출
전달된 인자 개수와 위치를 시그니처에 맞춘다.
호출부의 인자 개수, undefined 전달, 기본값 적용, 타입 확인을 한 흐름으로 보면 선택적 매개변수와 기본 매개변수의 차이가 분명해진다.
전달된 인자 개수와 위치를 시그니처에 맞춘다.
뒤쪽 선택 인자는 빠지면 undefined로 읽힌다.
기본값은 값이 undefined일 때만 적용된다.
선언 타입과 기본값에서 매개변수 타입을 계산한다.
필수 위치와 undefined 가능성을 컴파일 단계에서 막는다.
pick(items)
index는 undefined로 들어온 뒤 기본값 0을 사용한다.
pick(items, undefined)
중간 기본 매개변수를 건너뛸 때도 같은 대체 규칙을 탄다.
pick(items, 2)
실제 값이 있으면 기본값은 실행되지 않고 number로 확인된다.
function pick<T>( items: Array<T>, index = 0 ): T | undefined
기본값 0 때문에 index는 number로 추론되고 호출부에서는 생략 가능해진다.
통과: pick(names), pick(names, 1)
오류: pick(), pick(names, "1")
필수 매개변수 items는 반드시 필요하고, index는 number 또는 undefined만 허용된다.
선택적 매개변수는 undefined 가능성을 드러내고, 기본 매개변수는 undefined가 들어온 순간 안전한 런타임 값을 주입한다.